PHP有结果不同的时区两个日期时间

时间:2014-11-03 01:37:29

标签: php date datetime timezone

Php版本: 5.5.9-1ubuntu4.5

php.ini相关配置:

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
;date.timezone = UTC

我的PHP代码:

<?php
$datetime1 = new DateTime('2009-10-01 00:00:00');
$datetime2 = new DateTime('2009-11-01 00:00:00');
echo $datetime1->format('c') . '<br/>';
echo $datetime2->format('c') . '<br/>';

当我从浏览器访问该代码时,我得到了这个结果:

2009-10-01T00:00:00+08:00
2009-11-01T00:00:00+07:00

我的问题:为什么上述两个日期有不同的时区?

当我将date.timezone设置为UTC或其他时区时,上面的代码结果将给出正确的时区值。

2 个答案:

答案 0 :(得分:2)

夏令时。在您当地的时区,夏令时显然在十月的某个时间结束,将时钟发送回一小时,并改变相对于UTC的时间偏移。

答案 1 :(得分:0)

您的服务器时间未设置为UTC且您的php.ini未设置为使用UTC,因此您将获得服务器设置的任何时间。

php.ini文件的这一部分: -

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
;date.timezone = UTC

应该是这样的: -

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = UTC

请注意,冒号已从行的开头删除。冒号表示该行的其余部分是注释,应该被忽略。

如果您进行此更改并重新启动Apache,PHP现在将始终以UTC工作,您的测试代码将按预期工作。

如果可以,您也应该将服务器时区设置为UTC。