gpt4 book ai didi

PHP DateTime::Diff 弄错了吗?

转载 作者:可可西里 更新时间:2023-10-31 23:44:42 27 4
gpt4 key购买 nike

DateTime::Diff 应计算适当的时间间隔并考虑夏令时 (DST) 和闰年。虽然显然不是这样。恐怖代码:

$d1 = new DateTime("2011-10-30 01:05:00", new DateTimeZone("Europe/Stockholm"));
$d2 = new DateTime("2011-10-30 03:05:00", new DateTimeZone("Europe/Stockholm"));

echo $d1->getOffset() / (60 * 60);

打印“2”!因此请记住,前一天的 UTC 时间 = 1h - 2h = 23:05:00。

echo $d2->getOffset() / (60 * 60);

打印“1”。夏令时发生了。 UTC 时间 = 3h - 1h = 02:05:00。

$di = $d1->diff($d2);
echo "Hours of DateInterval: " . $di->h;

打印“2”!错了吗?

$hoursofdiff = ($d2->getTimeStamp() - $d1->getTimeStamp()) / 60 / 60;
echo "Calculated difference in hours: $hoursofdiff";

打印“3”!正确吗?

当时钟在给定日期转到 03:00:00 时,所有瑞典人都将时钟拨回一小时至 02:00:00。这意味着在 01:05 到 03:05 之间传递的总量是三个小时,很像使用 UNIX 时间戳时回显的手动计算。如果我们使用模拟时钟,就像我们用手指计算一样。更重要的是,当我们计算两个 UTC 时间戳之间的差异时,我使用 PHP 自己的偏移量逻辑 (!)。

是 PHP 还是我的大脑停止正常工作?站上各位大神的斥责一下我就开心死了!

我在 Apache 服务器上使用 PHP 5.4 (VC9)。不幸的是我使用 Windows 7 x64 作为操作系统。我已经根据 PHP 的日期/时间类中的所有错误声明测试了我的设置(有几个与 Windows 相关)并且可以确认我的系统没有任何错误。除了上述代码外,我没有发现任何其他错误。我几乎验证了所有代码并输出了“PHP Architect's guide to date and time programming”这本书必须提供的。因此,我必须得出结论,这一定是我的大脑女巫违约了,但我想我会先在这里试一试。

最佳答案

你是对的,PHP 目前不处理 DST 转换...

错误报告 #51051 (仍然打开)和 #55253 (已在 PHP 5.3.9 中修复)描述您遇到的问题。

Daniel Convissor 写了 an RFC trying to address the issue一段时间前,但更改日志并未表明此问题已得到解决。我希望这会在 5.4 中修复,但我没有看到任何证据。

何时/如果它被实现,看起来您必须将“DST”或“ST”附加到时间字符串。

最佳做法是使用 UTC 进行所有日期计算,这样可以避免此问题。

This DST best practices post信息量也很大。

关于PHP DateTime::Diff 弄错了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53764359/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com