gpt4 book ai didi

php - 究竟是什么导致这个每六个月一个小时的时间计算错误?

转载 作者:行者123 更新时间:2023-12-04 03:50:19 25 4
gpt4 key购买 nike

我有这个代码:

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。这些细节不是重要的部分。

只是说清楚:一旦“切换”到冬令时,相同的代码就不再回答假,而是回答真。整整一个小时都在返回错误答案。

我每六个月有一个小时来尝试调试它,因为没有明智的方法(据我所知)将感知的系统时间更改为 PHP,对于单个脚本,而不更改整个计算机的时间,这如果我那样做,会把所有事情都搞砸。

我到底错过了什么?很明显,它与冬季/夏季时间废话有关,但为什么呢?是的,strtotime 将时间转换为 Unix 纪元,它没有时区的概念,但它确实计算了自特定历史时刻以来的固定秒数,那么为什么这重要吗?我的时间戳来自同一台机器,相同的 PHP 脚本,它不会在刚切换时短暂发生,而是(至少)整整一个小时!

你不知道多年来我已经从我的头发上拔掉了多少头发,直到我刚才在问这个问题之前,才意识到是什么导致了这种情况发生。当我的代码没有任何变化导致 PHP 给出不同的答案时,我以为我疯了。但我还是不明白为什么

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

最佳答案

从夏令时到冬令时的转换之夜,时间 02:05 有两次可用。让我们考虑时间戳和时间:

for($ts = 1603580700; $ts <= 1603592300; $ts += 1800){
echo 'ts: '.$ts.' date: '.date('Y-m-d H:i \s:I',$ts).'<br>';
}

/*
ts: 1603580700 date: 2020-10-25 01:05 s:1
ts: 1603582500 date: 2020-10-25 01:35 s:1
ts: 1603584300 date: 2020-10-25 02:05 s:1
ts: 1603586100 date: 2020-10-25 02:35 s:1
ts: 1603587900 date: 2020-10-25 02:05 s:0
ts: 1603589700 date: 2020-10-25 02:35 s:0
ts: 1603591500 date: 2020-10-25 03:05 s:0
*/

对于格式 I,夏令时输出 1,冬令时输出 0。打印输出

echo strtotime ('2020-10-25 02:05'); //1603587900

但是,始终为冬季时间提供时间戳。像这样的相对表达strtotime('- 5 分钟')提供示例中 ts 的正确时间戳。

您的比较可能会给出不同的结果,具体取决于您是在时间更改之前还是之后的同一时钟时间进行测试。

关于php - 究竟是什么导致这个每六个月一个小时的时间计算错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64519503/

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