假设此代码:

<?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);
?>

在我的本地服务器上,我得到输出:
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

但是在生产中,相同的代码会产生:
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

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

一些信息:
$ date +%Z
GMT
$ date +%z
+0000
  • PHP 5.3.25(CLI)(内置:2013年5月11日09:54:00)
  • CentOS 5.9版(最终版)
  • 最佳答案

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

    pecl upgrade timezonedb
    

    并添加
    extension=timezonedb.so
    

    到php.ini

    重新启动服务器后,新的时区数据库版本2013.3已解决问题。

    关于php - 带有date_default_timezone_set和date的可能的PHP错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16508760/

    10-09 15:54