【问题标题】:PHP Carbon "month()" method generates wrong DateTimePHP Carbon "month()" 方法生成错误的 DateTime
【发布时间】:2016-10-31 17:59:36
【问题描述】:

我刚刚偶然发现了一些非常奇怪的东西。我使用“Carbon”包来生成 DateTime 对象。

我使用以下代码为 2016 年 9 月的开始创建一个 DateTime 字符串:

Carbon::create()->month(9)

如果我使用 Laravel 的“dd()”函数输出它,我会收到以下输出:

Carbon\Carbon {
  +"date": "2016-10-01 10:22:36.000000"
  +"timezone_type": 3
  +"timezone": "Europe/Vienna"
}

它返回 10 月 1 日,而不是 9 月 1 日!每隔一个月就可以正常工作。

我也试过这些:

Carbon::now()->month(9)
(new Carbon)->month(9)

但我得到了同样的错误结果。

是否有其他人遇到此错误,或者有人可以尝试一下并告诉我您是否收到相同的输出?还是我只是做错了什么,即使我什么都想不出来?

提前致谢。

【问题讨论】:

  • 我和你在同一条船上...stackoverflow.com/questions/40339101/…
  • 这似乎与今天是第 31 天和闰年跳过了整整一个月有关。我真的很想看到这个烦人的错误的解决方案,因为它搞砸了我的整个调度应用程序。
  • 说实话,我真的不知道该怎么办。
  • 我想我在 Github 问题跟踪器讨论中找到了一个解决方案,如果它有效,请告诉我。

标签: php datetime php-carbon


【解决方案1】:

我猜问题出在今天,也就是 31 日。

Carbon::create()->month(9) 尝试将同一天作为 9 月。由于 9 月没有 31 日,因此返回 10 月 1 日。试试:

Carbon::create()->day(1)->month(9);

或者

Carbon::create()->startOfMonth()->month(9);

或者

Carbon::create(null, 9);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 2019-02-05
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多