欧洲/莫斯科zoneinfo文件的PHP strftime("%z",time())给出错误的GMT偏移量

时间:2015-04-01 19:48:05

标签: php timezone

是的,我有最新的时区数据。从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年停止。

其他人使用来自2015b in PHP的欧洲/莫斯科区域信息文件遇到了这个。

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

1 个答案:

答案 0 :(得分:2)

嗯,事实证明,有两种方法可以解决这个问题。由于PHP有自己的时区文件副本,因此不使用系统的时区文件。

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

2)或者在我的php安装中添加时区扩展。时区扩展程序位于https://pecl.php.net/package/timezonedb