2012-11-21 56 views
0

當使用PHP的DateTime將存儲日期轉換爲其他時區後,是否需要存儲時間信息(例如,2012-12-31 00:00:00而不是2012-12-31)?看來如果我只是存儲日期,時區轉換是不準確的,所以我不確定是否真的需要時間信息,或者我只是錯過了一些東西?將日期轉換爲其他時區時是否需要存儲時間?

+1

如果您計劃基於時區的有效時間,爲什麼不存儲時間?似乎在某個日期調整時區對我來說是浪費。 – Jeremy1026

+0

更好地存儲時間戳而不是日期 –

+0

根據手冊中的示例,「2012-12-31」與「2012-12-31 00:00:00」相同,如果您構造此沒有時區的對象,那麼PHP將使用你的計算機時區。 –

回答

1

時區轉換工作按小時偏移 - 與出存儲的時間(ATLEAST小時),你無法準確計算的差異。

需要考慮的一個例子 - 假設您想按天分組數據,日期存儲在UTC中,但您的客戶端位於。

2012-12-31 08:00:00UTC上創建了一行,但您保存了2012-12-31

$date = new DateTime('2012-12-31', new DateTimeZone('UTC')); 
echo $date->setTimezone(new DateTimeZone('America/Los_Angeles'))->format('Y-m-d'); 
//2012-12-30 

$datetime = new DateTime('2012-12-31 08:00:00', new DateTimeZone('UTC')); 
echo $datetime->setTimezone(new DateTimeZone('America/Los_Angeles'))->format('Y-m-d'); 
//2012-12-31 

日期應反映PST 2012-12-31,但與出小時偏移它會被錯誤地轉換。另外,正如塞繆爾庫克所回答的,除非您在一個時區內將datetime明確地存儲在您的數據庫中,否則您應該存儲時區,以便知道您的轉換來自何處。

1

除了節省時間,您還應該保存當天節省的時間。這將有效地確保,當你改變到其他時區時,你知道什麼是時間的基礎。

例:2012-11-21T15:52:01+0000

More information here

相關問題