【问题标题】:PHP strtotime('UTC') different on another serverPHP strtotime('UTC') 在另一台服务器上不同
【发布时间】:2017-11-13 21:30:31
【问题描述】:

我有两个不同的服务器和同一个 PHP 网站的副本。

两台服务器都使用相同的时区“太平洋/奥克兰”。

此代码在服务器 #1 上显示相同的两个数字:

echo time();
echo strtotime('UTC');

1510607965 & 1510607965

但相同的代码在服务器 #2 上显示了两个不同的数字:

1510607965 & 1510654765

为什么每台服务器都不一样?

【问题讨论】:

  • PHP 使用的是哪个时区?您可以在脚本中使用date_default_timezone_get() 查找。两个时间戳的差异是 46800 秒,即 13 小时,恰好是奥克兰与 UTC 的偏移量,所以看起来一个 PHP 安装设置为 UTC (+0000),另一个设置为 Pacific/Auckland (+1300) .
  • 在您提出的最后一个问题中(在您删除之前)没有人说这个吗?
  • @MartinBean date_default_timezone_get() 在两者上都显示“太平洋/奥克兰”。
  • 听起来其中一台服务器上的时区数据库有问题。
  • @Barmar 他们都使用相同的 PHP 版本。我会尝试更新时区数据库。

标签: php date time utc strtotime


【解决方案1】:

两台服务器都使用相同版本的 PHP,但其中一台的时区数据库有问题。

我安装了新的 timezonedb,服务器 #1 现在显示正确的 UTC 时间。

【讨论】:

    【解决方案2】:

    strtotime() 的第一个参数应该是表示时间戳的字符串,例如 'Mon, 13 Nov 2017 15:30:24 -0800''2017-11-13 15:30:24'。将时区名称传递给此函数,例如 'UTC',不会产生有意义的结果。

    【讨论】:

    • 我认为这更像是一个评论而不是一个答案。
    猜你喜欢
    • 2015-12-23
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 2021-11-20
    • 2015-04-01
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多