【问题标题】:php strtotime with a future datetime returns a timestamp less than current timestamp带有未来日期时间的 php strtotime 返回小于当前时间戳的时间戳
【发布时间】:2018-10-25 09:21:42
【问题描述】:

我在我的服务器上运行 php。 strtotime 函数的文档说它将尝试将日期字符串解析为 Unix 时间戳(自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数)。

所以我的测试场景是:

字符串 "2018-05-15 14:30" 的时间戳:1526387400 => strtotime("2018-05-15 14:30")

根据 GMT 2018-05-15 13:26 的当前时间戳:1526390790 => time()

在这里,我预计 14:30 的时间戳大于 13:26。但尽管有未来的日期字符串,但该值小于当前时间戳。

我正在测试的服务器在 GMT+2 时区 = date('Z') => 7200 上运行。 我假设根据文档, strtotime 函数返回自纪元以来经过的秒数,而不考虑时区偏移量。我不确定时区偏移是否弄乱了数字。

对此的任何见解都会非常有帮助。

【问题讨论】:

  • PHP 使用服务器时间。所以这可能是你遇到的问题。第一次它直接转换,因为提供了时间。第二次是从服务器生成的。
  • 一个简单的测试here显示第一个时间戳对应于12:30。我不知道问题的答案,但我很确定时区与问题有关

标签: php timestamp epoch


【解决方案1】:

来自strtotime() manual

此函数的每个参数都使用默认时区,除非在该参数中指定了时区。请注意不要在每个参数中使用不同的时区,除非是有意的。

来自time() manual

返回以 Unix 纪元(格林威治标准时间 1970 年 1 月 1 日 00:00:00)以来的秒数为单位的当前时间。

所以你的 strtotime() 在 GMT+2 和 time() 在 GMT

【讨论】:

  • 谢谢贾里。在脚本开头添加 "date_default_timezone_set('UTC');" 后,我按我想要的顺序获取值。我注意到 date('Z') 函数的时区差异现在返回值 0。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
  • 2016-05-31
  • 2019-09-02
  • 2013-06-16
相关资源
最近更新 更多