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或其他时区时,上面的代码结果将给出正确的时区值。
答案 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。