2014-11-03 45 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。