在 PHP 開發中,經常會遇到 date() 函數輸出的時間與實際本地時間相差 8 小時的情況。這是因為 PHP 5.1.0 版本起在 php.ini 中新增了 date.timezone 選項,預設情況下未啟用,導致所有時間函數輸出的均為格林威治標準時間 (GMT),而北京時間 (UTC+8) 恰好相差 8 小時。
使用 PHP 5.1 以下版本可避開此問題,但這意味著放棄新版本的安全更新與功能改進,生產環境極不建議採用。
若無法修改 php.ini(如共享主機環境),可在所有時間相關代碼執行前調用:
<?php
date_default_timezone_set('Asia/Shanghai'); // 中國大陸
// date_default_timezone_set('Asia/Hong_Kong'); // 香港
// date_default_timezone_set('Asia/Taipei'); // 台北
// date_default_timezone_set('Asia/Macao'); // 澳門
// date_default_timezone_set('Asia/Singapore'); // 新加坡
echo date("Y-m-d H:i:s"); // 現在輸出正確的本地時間
?>
php.ini,搜尋 date.timezone; 取消註釋date.timezone = Asia/Shanghai| 地區 | 時區標識符 |
|---|---|
| 中國大陸 (北京時間) | Asia/Shanghai |
| 香港 | Asia/Hong_Kong |
| 台北 | Asia/Taipei |
| 澳門 | Asia/Macao |
| 新加坡 | Asia/Singapore |
提示: 方法三屬一次設定、永久生效,適合擁有服務器控制權的項目;方法二靈活度高,適合無法修改配置文件的場景。建議在項目初始化文件 (如 config.php、bootstrap.php) 中統一調用 date_default_timezone_set(),確保全站時間一致性。