PHP中如何處理時區

大江小浪發表於2010-02-06

預設安裝的LAMP環境中,時區預設設定在GMT時間,所以一般得到的時間都會比我們電腦中顯示的時間早八個小時(假設你的時間設定正確,並且時區是在東八區)。PHP提供了兩個函式用來處理時區的操作:

date_default_timezone_set() 和 date_default_timezone_get()

如果我們希望更改伺服器預設的時區,修改 php.ini 檔案中的 ;date.timezone = ,新增自己需要的時區,例如 date.timezone = Asia/Chongqing,然後重啟伺服器就可以了。PHP支援的 timezone 的字串在參考資料[1]中可以看到。

用下面這一段程式碼,可以比較清楚的看到時區變化的影響:

$now = time();
echo “The GMT now is : ” . date(`Y-m-d H:i:s`, now()) . `<br />` ;
echo “The local time is : ” . date(`Y-m-d H:i:s`, gmt_to_local($now) ) . `<br />`;
date_default_timezone_set(`Asia/Chongqing`);
echo `Set the timezone to :` . date_default_timezone_get() . “<br />”;
echo “The GMT now is : ” . date(`Y-m-d H:i:s`, now()) . `<br />` ;
echo “The local time is : ” . date(`Y-m-d H:i:s`, gmt_to_local($now) ) . `<br />`;

如果我們的站點是面向單一時區的使用者,我想採用這個時區的時間來記載沒什麼問題,或者網站應用的型別並不 Care 時間的差別,那麼我們用什麼時間做儲存都沒關係。一旦我們的使用者對於時區的影響有較大關係的時候,我想應該統一使用GMT的標準時間來進行儲存,在顯示的時候再根據使用者所在的時區進行顯示,這樣雖然前端顯示每次都需要去計算使用者當前的時間,但是對於後臺邏輯的統一性應該是大有裨益的。

目前,我們國家已經廢除了夏令時的使用,但是世界上仍有其他一些國家在使用夏令時,我們在程式處理的時候應該注意這個問題,具體的資料可以參考 Daylight Saving

Technorati Tags: timezones,時區,夏令時

參考資料:
1、List of Supported Timezones
2、Daylight Saving


相關文章