带有 unix 时间戳的 php DateTime 对象错误 - bug?

发布于 2024-12-08 17:50:44 字数 509 浏览 0 评论 0原文

刚刚偶然发现了 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心碎的声音 2024-12-15 17:50:44

由于您没有为 DateTime 指定时区,因此假定它是 UTC,而 date 遵循当前时区(由 date_default_timezone_set< 指定) /code> 或取自 php.ini)。只需执行此命令即可看到:

$date = 1335823200;
echo date('d-m-Y  H:i:s',$date);
echo '<br />';
$date = new DateTime("@$date");
echo $date->format('d-m-Y H:i:s');

Since you did not specify timezone for DateTime it is supposed that it is UTC, while date respects current timezone (specified by date_default_timezone_set or taken from php.ini). Just execute this and see:

$date = 1335823200;
echo date('d-m-Y  H:i:s',$date);
echo '<br />';
$date = new DateTime("@$date");
echo $date->format('d-m-Y H:i:s');
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文