2014-11-03 48 views
0

PHP版本:5.5.9-1ubuntu4.5PHP有导致不同的时区两个日期时间

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

+1

如果您未通过php.ini设置时区,那么您的代码在哪个时区?它可能在时区中有你的两个日期之间的DST切换。 – 2014-11-03 06:27:39

+2

使用'date_default_timezone_get()'查看当前时区。 – 2014-11-03 06:42:22

回答

2

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

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。