2011-06-08 34 views
3

我收到時間:我必須明確地用DateTimeZone重寫PHP的DateTime嗎?

0001-01-01T00:00:00.000Z 
Greenwich Mean Time 

我在一個DateTime保存爲:

$event->startTime = new DateTime($item->startTime, new DateTimeZone('GMT')); 

這給了我:

protected 'startTime' => 
    object(DateTime)[137] 
     public 'date' => string '0001-01-01 00:00:00' (length=19) 
     public 'timezone_type' => int 2 
     public 'timezone' => string 'Z' (length=1) 

這意味着它忽略了時區。從文檔:

注:

在$時區參數和 當前時區都將被忽略,當 $時間參數要麼是UNIX 時間戳(如@ 946684800)或 指定一個時區(例如 2010-01-28T15:00:00 + 02:00)。

如果我事後重寫它:

$event->startTime->setTimezone(new DateTimeZone('GMT')); 

我得到:

protected 'startTime' => 
    object(DateTime)[137] 
     public 'date' => string '0001-01-01 00:00:00' (length=19) 
     public 'timezone_type' => int 3 
     public 'timezone' => string 'UTC' (length=3) 

因此,響應說,時區必須是GMT/UCT是+ 0,但PHP決定TL;博士和我結束了我的默認php.ini時區+2。這不是錯的嗎?

無論如何,我將使用開始時間作爲倒計時,所以時區是至關重要的。我的問題是:我是否將時區覆蓋到UCT是正確的?當我打算使用DateTime :: diff時,是否會給我正確的時間?

+0

由於PHP是一種服務器端語言,因此獲取Datetime對象總是最終成爲服務器端的時間,不是嗎? – 2011-06-08 10:10:48

+0

是的,但是我必須堅持DateTime與事件的時區或服務器的時區? – Tjorriemorrie 2011-06-08 10:26:08

回答

0

The documentation表示您不應該使用GMT作爲DateTimeZone類的有效時區。

可能會刪除Z並指定創建DateTime時的時區,這樣構造函數不會忽略時區。

$startTime = new DateTime('0001-01-01T00:00:00.000', new DateTimeZone('UTC')); 

這將是最容易堅持一切爲UTC,否則運行代碼在不同的時區或當夏令時在影響可能可能導致不可預見的問題。

相關問題