在 PHP 5.3+ 版本中,若未正確配置時區設置,調用 date() 等時間函數時會拋出嚴格警告:
PHP Warning:
date() [function.date]: It is not safe to rely on the system's timezone settings.
You are *required* to use the date.timezone setting or the date_default_timezone_set() function.
In case you used any of those methods and you are still getting this warning,
you most likely misspelled the timezone identifier.
We selected 'UTC' for '8.0/no DST' instead in...
自 PHP 5.1.0 起,時間函數要求明確時區設置。PHP 5.1.0 中 date.timezone 默認關閉,所有時間按 GMT 處理;PHP 5.3+ 則強制拋出此警告。解決核心在於「本地化」時區配置。
date_default_timezone_set()<?php
// 在腳本最頂部設置(推薦放在公共配置文件中)
date_default_timezone_set('PRC'); // 中國標準時間(東八區)
// 或具體城市:date_default_timezone_set('Asia/Shanghai');
echo date('Y-m-d H:i:s');
?>
優點:無需修改服務器配置,代碼可移植性強
缺點:每個入口文件都需包含,維護成本高
ini_set()<?php
ini_set('date.timezone', 'Asia/Shanghai');
echo date('Y-m-d H:i:s');
?>
優點:運行時動態生效,無需重啟服務
缺點:同樣需在每個腳本調用,不如配置文件徹底
C:\Windows\php.ini 或 PHP 安裝目錄)date.timezone; 取消註釋date.timezone = PRC 或 date.timezone = Asia/Shanghai; 修改前
;date.timezone =
; 修改後
date.timezone = PRC
優點:一勞永逸,全局生效,無需修改代碼
缺點:需要服務器權限,共享主機可能無法修改
| 標識符 | 說明 |
|---|---|
| PRC | 中華人民共和國時間(推薦,等同 Asia/Shanghai) |
| Asia/Shanghai | 上海/北京時間(東八區) |
| Asia/Hong_Kong | 香港時間 |
| Asia/Taipei | 台北時間 |
| UTC | 協調世界時(格林威治標準時間) |
<?php
// 創建測試文件 test_timezone.php
echo "當前時區設置: " . date_default_timezone_get() . "<br>";
echo "當前時間: " . date('Y-m-d H:i:s') . "<br>";
echo "時間戳: " . time();
?>
訪問該文件,若無警告且時間顯示正確(與本地時間一致),配置成功。
Asia/Shangai(缺少 h)會導致回退 UTC三種方法任選其一即可解決警告。生產環境強烈推薦方法三(修改 php.ini),實現全局統一配置,避免代碼耦合。開發環境或無服務器權限時,可使用方法一在公共引導文件中統一設置。