PHP 5.1+ 版本在使用 date()、time() 等日期時間函數時,若未顯式設置時區,會拋出 E_WARNING:
PHP Warning: 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.
PHP 默認使用 UTC(格林威治標準時間),與中國標準時間(CST,UTC+8)相差 8 小時。未設置時區會導致業務邏輯時間偏移、日誌難以排查、定時任務錯亂。
在項目入口文件(如 index.php、common.php、框架 Bootstrap)最早處調用:
<?php
// 設置為中國標準時間(PRC = People's Republic of China)
date_default_timezone_set('PRC');
// 或等價寫法
date_default_timezone_set('Asia/Shanghai');
date_default_timezone_set('Asia/Chongqing');
優點:無需改動服務器配置,代碼可移植,適合共享主機、無 php.ini 權限場景。
缺點:每個入口都要寫,CLI 腳本、定時任務、獨立腳本易漏寫。
php.ini:php --ini 或 phpinfo() 查看 Loaded Configuration Filedate.timezone,修改為:date.timezone = PRC
; 取消註釋systemctl restart php-fpm 或 service httpd restart優點:全局生效,覆蓋 Web、CLI、定時任務所有場景,維護成本最低。
注意:時區標識符必須來自 PHP 官方時區列表,常用:PRC、Asia/Shanghai、Asia/Chongqing、UTC、America/New_York。
Nginx + PHP-FPM(fastcgi_param):
location ~ \.php$ {
fastcgi_param PHP_VALUE "date.timezone=PRC";
# ...
}
Apache(.htaccess 或虛擬主機配置):
php_value date.timezone PRC
<?php
echo '當前時區: ' . date_default_timezone_get() . PHP_EOL;
echo '當前時間: ' . date('Y-m-d H:i:s') . PHP_EOL;
echo '時間戳: ' . time() . PHP_EOL;
// 輸出應為 CST 時區時間,無 Warning
CST、GMT+8、China 均無效,必須用 PRC 或 Asia/Shanghai。php --ini 確認。生產環境**強烈建議修改 php.ini 設置 date.timezone = PRC**,一次配置、全局生效、零代碼入侵。開發環境或無權限場景可用 date_default_timezone_set('PRC') 兜底。解決該警告不僅消除錯誤日誌噪音,更是保障業務時間準確性的基礎建設。