有没有人以前遇到过这个错误,或者知道解决方法?
我想在数组中获取今年所有月份的列表(开始日期和结束日期),所以我这样做(接受更清晰更简单的方法的建议)
//Create a months array
$months = [];
//Get start and end of all months
for($i = 1; $i <= 12; $i++){
$array = [];
$array['start'] = Carbon::create()->month($i)->startOfMonth()->format('d/m/y');
$array['end'] = Carbon::create()->month($i)->endOfMonth()->format('d/m/y');
array_push($months, $array);
}
Run Code Online (Sandbox Code Playgroud)
哪个产生这个结果
正如您所看到的,它循环并检索了月份,但请注意,它完全跳过了二月并添加了三月两次。
如果我手动运行并返回此代码
return Carbon::create()->month(2)->startOfMonth()->format('d/m/y');
Run Code Online (Sandbox Code Playgroud)
它返回01/03/2018。
为什么 Carbon 会打印出 March 2 月份?有没有人以前遇到过这个问题或知道解决方法?
Carbon::create()->month(2)将首先创建今天的日期,然后将月份设置为2,但保留其他值。因为今天的日期是 8 月 29 日,所以该日期最终指的是 2 月 29 日,而这个日期(至少今年)不存在。PHP 将这些“假”日期滚动到下个月,因此2 月 29 日变成3 月 1 日。
如果您首先明确设置月份中的某一天,则应按预期工作:
Carbon::create()->day(1)->month($i);
Run Code Online (Sandbox Code Playgroud)
(另外,如果你昨天尝试过,它会工作得很好,你可能永远不会注意到这个错误。如果你明天尝试过,你会在 3 月 2 日结束,并且可能会更快地注意到它。日期很棒乐趣。)
| 归档时间: |
|
| 查看次数: |
13689 次 |
| 最近记录: |