PHP 日期更改 strtotime 效果不佳

问题描述

日期未正确更改格式(YYYYMM -> YYYYY-MM)。

我想将 YYYYMM (int) 更改为 YYYY-MM 以使用 HTML 月份输入

我是这样实现的...但 $s_month 总是以某种方式显示 2021-06

                {{$test->month }}//202005
@PHP
                $s_month= $test->month ? date('Y-m',strtotime($test-> month)):"";
@endPHP
{{$s_month}} // it displays 2021-06
<input name="s_month" type="month" value="{{$s_month?? ''}}"></input>

解决方法

Carbon 解决方案:

use Carbon\Carbon;
...
$s_month= $test->month ? Carbon::createFromFormat('Ym',$test->month)->format('Y-m') : "";

原生 DateTime 解决方案:

$s_month= $test->month ? DateTime::createFromFormat('Ym',$test->month)->format('Y-m') : "";
,

strtotime(理所当然地)不足以解析没有分隔符的字符串,因为该值可以是任何值,毫秒、纳秒、纪元等。一种选择是添加分隔符:>

$originalDate = '202005';
$separateDate = substr($originalDate,4) . '-' . substr($originalDate,4,6); // 2020-05

此时您需要手动删除原始日期,但为了完整起见并确保我们已完成目标,我们可以在日期对象中使用此字符串。

$intendedDate = date('Y-m',strtotime($separateDate)); // 2020-05

或者,作为 mentioned by @shaedrichCarbon 非常有用,可以更优雅地完成这项工作。