php - PHP DateTime::add 不添加时间的奇怪问题

标签 php datetime

我已经设法将其简化为一个小脚本,可以重现该问题(在两台不同的 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/

相关文章:

php - 为每个序列化 ID 和 PHP

php - SQLite3/PDO - 虽然确实存在但没有这样的表

php - MYSQL表根据日期自动更新

php - Google 通讯录广播/推送/通知/ Hook API

sql-server - SQL 查询永远耗时

ruby-on-rails - 如何将日期时间值格式化为更友好的格式?

php - 上传的文件应该重命名吗?

javascript - 在 Javascript 中将日期时间字符串转换为单个时间单位(如秒)

sql - PostgreSQL:运算符不存在:无时区的时间戳==无时区的时间戳

java - 解析日期时间时出错,带有有效时间戳的 DateTimeParseException