PHP的奇怪问题';s DateTime::add而不是添加时间


Weird issue with PHP's DateTime::add not adding time

我已经设法将其简化为一个小脚本,它再现了这个问题(在两台不同的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()));