加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP的DateTime :: Diff错误?

发布时间:2020-12-13 16:38:15 所属栏目:PHP教程 来源:网络整理
导读: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/Stock
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′. DST发生了. 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 TimeStamp时手动计算回显一样.如果我们使用模拟时钟,就像我们的手指一样计算.当我们计算使用PHP自己的偏移量(!)的两个UTC时间戳之间的差异时,更是如此.

是PHP还是让我的大脑不再正常工作?来自任何人的谴责,这个网站上存在的所有神将使我如此高兴!

我在Apache服务器上使用PHP 5.4(VC9).不幸的是,我使用Windows 7 x64作为操作系统.我测试了我的设置,反对PHP的Date / Time类中的所有错误声明(有一些与Windows有关),并且可以确认我的系统没有.除了上述代码之外,我还没有发现任何其他错误.我几乎验证了所有代码,并输出了“PHP建筑师的日期和时间编程指南”一书.所以我必须得出结论,它必须是我的大脑巫婆已经默认,但我以为我会先给它一个射击.

你是对的,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也非常翔实.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读