PHP 5.3.0 DateTime 类的 BUG

观察以下代码:

setTimezone(new DateTimeZone($tz));

// 输出时间
echo $dt->getTimestamp();
echo “\n”;
echo $dt->format(“Y-m-d H:i:s”);
echo “\n”;

// 时间减7天
$dt->sub(new DateInterval(‘P7D’));

// 输出时间
echo $dt->getTimestamp();
echo “\n”;
echo $dt->format(“Y-m-d H:i:s”);
echo “\n”;

// 再次输出时间
echo $dt->getTimestamp();
echo “\n”;
echo $dt->format(“Y-m-d H:i:s”);
echo “\n”;

正确的输出结果应该是:

1303974000
2011-04-28 00:00:00
1303369200
2011-04-21 00:00:00
1303369200
2011-04-21 00:00:00

可是在 PHP 5.3.0 下测试,输出结果为:

1303974000
2011-04-28 00:00:00
1302764400
2011-04-14 00:00:00
1302159600
2011-04-07 00:00:00

真是不可思议!进一步测试发现每次调用 $dt->getTimestamp() 都会使 $dt 往前再减7天。
有在用 DateTime 类的同学们,赶紧把 PHP 版本升级下吧。
PHP 5.3.3 版本下测试正常。

Google 了一下关键词“php 5.3.0 datetime sub bug”,发现这个确实是一个 BUG。
http://bugs.php.net/49059

— EOF —

18 thoughts on “PHP 5.3.0 DateTime 类的 BUG”

发表评论

电子邮件地址不会被公开。 必填项已用*标注