我已经设法将其简化为一个小脚本,可以重现该问题(在两台不同的 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 中修复?或者我忽略了时间上有什么奇怪的事情吗?
最佳答案
是的,这是一个错误。我在 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()));
关于php - PHP DateTime::add 不添加时间的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9256354/