每六个月一小时的时间计算错误到底是由什么引起的?

问题描述

我有此代码:

var_dump(strtotime('2020-10-25 02:05') > strtotime('-5 minutes'));

它是在我的系统时钟为2020-10-25 02:04时执行的。它回答了false,即使该时间戳明显比执行时的“当前时间减去5分钟”“大”(“年轻”)。 (只有1分钟前。)

但是,在零代码更改的情况下,它已经针对此类查询回答了true,直到一个特定的小时为止(相隔六个月)。

您知道,它已切换到我现在居住的“冬季时间”。这意味着在某个时间点,我假设午夜UTC,时间倒退或前进一小时。

由于我的时区是UTC的两个小时,所以“魔术小时”是01:00-02:00或02:00-03:00。这些细节不是重要的部分。

只需说明一下:相同的完全相同的代码在“切换”到冬季时就停止回答false,而是回答true。整整一个小时它都返回了错误的答案。

我每六个月有一个小时来尝试调试此问题,因为(我知道)没有一种明智的方法可以将单个脚本的感知系统时间更改为PHP,而不更改整个计算机的时间,如果那样的话,会搞砸各种事情。

我到底想念什么?显然,这与冬/夏令时间无关,但是为什么呢?是的,strtotime将时间转换为没有时区概念的Unix时代,但是自特定的历史时刻起,它确实计数固定的秒数,所以为什么如此重要?我的时间戳记来自同一台机器,相同的PHP脚本,并且切换时不会只是短暂地发生,而是(至少)一个小时!

直到我问这个问题之前,直到现在我才从自己的头发上拔下多少根头发,才知道这是什么原因造成的。当我的代码中没有任何变化导致PHP给出不同的答案时,我以为我疯了。但是我还是不明白为什么。

您能解释一下为什么两个比较的时间戳都使用相同时区时会如此困惑吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)