碳('last day of October')->修改('+1 month')意外结果


Carbon('last day of October')->modify('+1 month') unexpected result

谁能给我解释一下为什么(new Carbon('last day of October'))->modify('+1 month');返回

 Carbon {#326
    +"date": "2016-12-01 00:00:00.000000"
    +"timezone_type": 3
    +"timezone": "Europe/"
  }

modify('-1 month')相同。当修改一个月时,碳会在目标月份中减少或增加一些天吗?因此,当我们在10月的最后一天加上"1个月"时,Carbon会在10月31日加上31天,并返回12月1日……

似乎碳库仍然有一些bug。你可以试试这个方法。

Carbon::create()->endOfMonth()->month(10)->modify('+1 month')

您可以在http://phpio.net/tools/carbon查看结果

last day of October为当年Oct 31st

Oct 31st +1 month 11月 31。那是一个无效的日期。但显然,它应该与Nov 30th +1 day相同,即Dec 1st

问题是两个评估都是独立完成的。modify("+1 month")不知道它应该导致"最后一天";

你不能通过使用endOfMonth()来解决这个问题,除非它实际上是链中的最后一个日期更改。它与modify("last day of this month")基本相同,但将时间提前到午夜前1µs。

相反,您可以将字符串连接到单个表达式中,例如:last day of October +1 month .