我已经设法将其缩小为一个可以重现问题的小脚本(尝试使用两种不同的PC,但都使用5.3.6):
<?php
$item = array('monthly_on_the' => 4);
$date = new DateTime();
$date->modify('first day of this month');
print_r($date);
$interval = new DateInterval('P'.$item['monthly_on_the'].'D');
print_r($interval);
$return = $date->add($interval);
if (!$return) die('Bad stuff happened!');
print_r($date);
DateTime Object
(
[date] => 2012-02-01 17:15:23
[timezone_type] => 3
[timezone] => Australia/Sydney
)
DateInterval Object
(
[y] => 0
[m] => 0
[d] => 4
[h] => 0
[i] => 0
[s] => 0
[invert] => 0
[days] =>
)
DateTime Object
(
[date] => 2012-02-01 17:15:23
[timezone_type] => 3
[timezone] => Australia/Sydney
)
这是一个错误,如果是这样,它是否已在更新版本的PHP中得到修复?或者在我忽视的东西中有什么奇怪的东西吗?
答案 0 :(得分:2)
是的,这是一个错误。我在使用PHP 5.3.6时遇到了同样的问题。显然它已在5.3.7中修复。请参阅更改日志:
http://www.php.net/ChangeLog-5.php#5.3.7
错误报告:
https://bugs.php.net/bug.php?id=54340
解决方法(如果无法升级):
$date->setTimestamp(strtotime('first day of this month', $date->getTimestamp()));