無意中發現 lnmp 默認的 php.ini 配置中有一行 date.timezone = PRC。PRC,People’s Republic of China,中華人民共和國,也就是日期使用中國的時區。
date.timezone 是 PHP 5.1 中新增加的配置文件參數,默認 date.timezone 是被注釋掉的,也就是默認時區是 utc,lnmp 改為了 date.timezone = PRC,這樣可以解決時間相差八小時的問題,看來 lnmp 的本土化工作做得不錯。不過貌似這個參數一般都設成 Asia/Shanghai 吧?在 PHP 官方文檔上找了半天才找到 PRC 這個參數,它不在 Asia 這個分類中,而在 Others,一般人都會在 Asia 里面找吧。
搜索了一下 PHP 源碼,在 ext/date/lib/timezonemap.h 中看到如下代碼
{ "cst", 0, 28800, "Asia/Chongqing" }, { "cst", 0, 28800, "Asia/Chungking" }, { "cst", 0, 28800, "Asia/Harbin" }, { "cst", 0, 28800, "Asia/Kashgar" }, { "cst", 0, 28800, "Asia/Macao" }, { "cst", 0, 28800, "Asia/Macau" }, { "cst", 0, 28800, "Asia/Shanghai" }, { "cst", 0, 28800, "Asia/Taipei" }, { "cst", 0, 28800, "Asia/Urumqi" }, { "cst", 0, 28800, "PRC" }, { "cst", 0, 28800, "ROC" },
對 PHP 源碼的時間部分沒有什么研究,姑且認為這幾個參數都表示 UTC+8 的東八區中國的北京時間吧。
當然,可以在 PHP 代碼中調用 date_default_timezone_set 函數設置運行時的時區,這是常識,我就不多說了。
