【问题标题】:php strtotime end of day light savingphp strtotime 夏令时结束
【发布时间】:2021-11-07 20:46:41
【问题描述】:

今天早上 strtotime() 和 time() 遇到了问题,因为时间变回了 1 小时。

date_default_timezone_set('America/New_York');
$expire = strtotime('+15 minutes');
if ($expire < time()) {
// session expired
}

在第二个凌晨 1 点到 2 点之间,strtotime 产生的时间小于 time(),因此会话在创建时过期。这是为什么呢?

【问题讨论】:

    标签: php unix-timestamp


    【解决方案1】:

    time() 返回当前的 Unix 时间戳,根据定义,它是自 1970 年 1 月 1 日以来的秒数,UTC。 UTC 不遵守时区。

    您将时区设置为America/New_York,然后使用strtotime() 获取当前本地时间,它确实遵守时区,因此存在差异。

    UTC 专门用于提供一致且连续的时间参考。如果您需要执行依赖于一致时间参考的操作,请始终使用 UTC。

    FWIW,每当我必须处理时间问题时,我都会在任何地方(PHP、数据库等)设置 UTC,并在演示代码中转换为本地时间 - 通常由客户端上的 JavaScript 完成。

    【讨论】:

    • 谢谢,关于 UTC 的精彩提示。我一定会进行更新的。我确信这将解决问题。我只是对过去 +15 分钟感到困惑,即使时区使用的是 New_York,这似乎很奇怪。
    猜你喜欢
    • 2012-09-13
    • 2013-05-16
    • 2013-05-16
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 2013-11-15
    • 2014-04-26
    相关资源
    最近更新 更多