带有 unix 时间戳的 php DateTime 对象错误 - bug?
刚刚偶然发现了 php 的 DateTime 对象的这个奇怪的错误...... 检查一下:
<?php
$date = 1335823200;
echo date('d',$date);
echo '<br />';
$date = new DateTime("@$date");
echo $date->format('d');
?>
返回:
06
05
任何时间戳都不会发生这种情况。我怀疑这与不同的时区有关,但使用 setlocale() 没有任何帮助。顺便说一句,DateTime 中的“@”需要能够使用 unix 时间戳(请参阅错误报告 此处)。这里还有一些要测试的时间戳:
1333663200
1338588000
1338847200
Just stumbled upon this weird bug with php's DateTime object...
Check this out:
<?php
$date = 1335823200;
echo date('d',$date);
echo '<br />';
$date = new DateTime("@$date");
echo $date->format('d');
?>
Returns:
06
05
It doesn't happen with any timestamp. I suspect that it has something to do with different timezones, but playing around with setlocale() didn't help anything. By the way, the '@' in the DateTime is needed to be able to use unix timestamps (see bug report here). Here a few more timestamps to test:
1333663200
1338588000
1338847200
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
由于您没有为
DateTime
指定时区,因此假定它是UTC
,而date
遵循当前时区(由date_default_timezone_set< 指定) /code> 或取自
php.ini
)。只需执行此命令即可看到:Since you did not specify timezone for
DateTime
it is supposed that it isUTC
, whiledate
respects current timezone (specified bydate_default_timezone_set
or taken fromphp.ini
). Just execute this and see: