date_default_timezone_set和date的可能的PHP错误?

Dal*_*ius 6 php date

假设这段代码:

<?php
date_default_timezone_set('UTC');
$time = gmmktime(14, 50, 0, 5, 12, 2013);
echo date('Y-m-d H:i:s O', $time).'<br />';
echo gmdate('Y-m-d H:i:s O', $time).'<br />';

date_default_timezone_set('GMT');
$time = gmmktime(14, 50, 0, 5, 12, 2013);
echo date('Y-m-d H:i:s O', $time).'<br />';
echo gmdate('Y-m-d H:i:s O', $time);
?>
Run Code Online (Sandbox Code Playgroud)

在我的本地服务器上,我得到输出:

2013-05-12 14:50:00 +0000
2013-05-12 14:50:00 +0000
2013-05-12 14:50:00 +0000
2013-05-12 14:50:00 +0000
Run Code Online (Sandbox Code Playgroud)

但在生产中,相同的代码产生:

2013-05-12 10:50:00 -0400
2013-05-12 14:50:00 +0000
2013-05-12 14:50:00 +0000
2013-05-12 14:50:00 +0000
Run Code Online (Sandbox Code Playgroud)

更改机器的时间不会以任何方式影响输出.

一些信息:

$ date +%Z
GMT
$ date +%z
+0000
Run Code Online (Sandbox Code Playgroud)
  • PHP 5.3.25(cli)(建于2013年5月11日09:54:00)
  • CentOS发布5.9(最终版)

Dal*_*ius 1

phpinfo() 显示“Olson”时区数据库版本为 0.system,所以我使用了该命令

pecl upgrade timezonedb
Run Code Online (Sandbox Code Playgroud)

并添加了

extension=timezonedb.so
Run Code Online (Sandbox Code Playgroud)

到 php.ini

重新启动服务器后,使用新的时区数据库版本2013.3解决了该问题