默認安裝的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。