【问题标题】:PHP strftime("%z", time()) for the Europe/Moscow zoneinfo file is giving wrong GMT offset欧洲/莫斯科区域信息文件的 PHP strftime("%z", time()) 给出了错误的 GMT 偏移量
【发布时间】:2015-04-01 19:48:04
【问题描述】:

是的,我有最新的时区数据。从 2015b 时区数据的 centos rpm 获取。它确实有 2014 年的变化,如下所示。 (我还编译了来自 IANA 的 2015b 区域文件,结果相同)

是的,我的 php.ini 和 phpcli.ini 文件有 date.timezone = Europe/Moscow

使用PHP 5.5.10, Httpd: 2.4.9

但是当我得到时区时,它已经关闭了 1 小时。

<?php
$zoneFormat = "%z";
$localtime = strftime($zoneFormat, time());
echo "localtime=".$localtime . "\n";

给出输出:

[root@cougar ~]# php qtime.php
localtime=+0400

但是如果我对一个 samll c 程序做同样的事情:

[root@cougar ~]# cpptime
Result string is "2015 04 01 22:40:20 MSK:+0300"

如果我从 getTransitions() 调用中转储数组,它将在 2011 年停止。

其他人在 PHP 中使用 2015b 的 Europe/Moscow 区域信息文件遇到了这个问题。

Europe/Moscow  Sat Mar 26 22:59:59 2011 UTC = Sun Mar 27 01:59:59 2011 MSK isdst=0 gmtoff=10800
Europe/Moscow  Sat Mar 26 23:00:00 2011 UTC = Sun Mar 27 03:00:00 2011 MSK isdst=0 gmtoff=14400
Europe/Moscow  Sat Oct 25 21:59:59 2014 UTC = Sun Oct 26 01:59:59 2014 MSK isdst=0 gmtoff=14400
Europe/Moscow  Sat Oct 25 22:00:00 2014 UTC = Sun Oct 26 01:00:00 2014 MSK isdst=0 gmtoff=10800
Europe/Moscow  Mon Jan 18 03:14:07 2038 UTC = Mon Jan 18 06:14:07 2038 MSK isdst=0 gmtoff=10800
Europe/Moscow  Tue Jan 19 03:14:07 2038 UTC = Tue Jan 19 06:14:07 2038 MSK isdst=0 gmtoff=10800

【问题讨论】:

    标签: php timezone


    【解决方案1】:

    好吧,事实证明有 2 个选项可以解决此问题。由于PHP有自己的时区文件副本,不使用系统的时区文件。

    1) 将 PHP 升级到包含最新时区数据库的版本。

    2) 或者将时区扩展添加到我的 php 安装中。时区扩展可以在https://pecl.php.net/package/timezonedb 找到

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-27
      • 1970-01-01
      • 2015-04-01
      • 2019-05-23
      相关资源
      最近更新 更多