【发布时间】:2015-09-09 13:25:23
【问题描述】:
当日期时间对象的日期为“2012-01-30”时,我们有以下对象:
object(DateTime)#1233 (3) {
["date"]=>
string(19) "2012-01-30 00:00:00"
["timezone_type"]=>
int(3)
["timezone"]=>
string(9) "ETC/GMT+3"
}
但是,如果加上一个月:
$date->add(new DateInterval('P1M'));
它将产生以下对象:
object(DateTime)#1233 (3) {
["date"]=>
string(19) "2012-03-01 00:00:00"
["timezone_type"]=>
int(3)
["timezone"]=>
string(9) "ETC/GMT+3"
}
应该加上一个月,所以要显示的日期应该是 '2012-02-28',因此是 2012 年 2 月,而不是 2012 年 3 月。
我该如何解决这个问题?
【问题讨论】:
-
请注意,这种“溢出”或“翻转”行为是设计的一部分。见it described in Example #3 in the docs。它在其他语言中也很常见,但恕我直言,这是一个糟糕的设计 - 出于您说明的原因。此外,这只是闰年问题,因为 2012 年 2 月有 29 天。对于 any 年的 any 月,这仍然是一个问题,其中生成月份的天数少于原始日期的天数。
标签: php date datetime leap-year