首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP date() 函數時區警告解決方案:date.timezone 設定完全指南

     編輯:PHP 相關知識

PHP date() 函數時區警告解決方案:date.timezone 設定完全指南

PHP 5.3+ 預設要求明確設定時區,否則呼叫 date()、time() 等函數會拋出 Warning: date(): It is not safe to rely on the system's timezone settings...。本文提供兩種標準解決方案與最佳實踐建議。

警告訊息範例

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 'Asia/Chongqing' for 'CST/8.0/no DST' instead in /path/file.php on line 542

方案一:程式碼中設定 (適用單一腳本、快速測試)

<?php
// 腳本最頂端,在任何 date() 呼叫之前
date_default_timezone_set('PRC'); // 或 'Asia/Shanghai', 'Asia/Taipei'
echo date('Y-m-d H:i:s'); // 正常輸出,無警告
?>

缺點:每支腳本都需加入,專案擴大時維護困難。

方案二:php.ini 全域設定 (推薦,生產環境標準)

  1. 找到 php.ini 位置:php --ini 或 phpinfo()
  2. 搜尋 date.timezone
  3. 修改為:date.timezone = PRC (或 Asia/Shanghai, Asia/Taipei)
  4. 若無此行,直接新增
  5. 重啟 Web 伺服器 (Apache/Nginx + PHP-FPM)
; php.ini
[Date]
; Defines the default timezone used by the date functions
date.timezone = PRC

中國常用時區識別碼對照

識別碼說明適用地區
PRC中華人民共和國別名中國大陸 (推薦)
Asia/Shanghai上海時區 (UTC+8)中國大陸、標準 IANA 格式
Asia/Chongqing重慶時區 (UTC+8)中國大陸、PHP 預設回退值
Asia/Taipei台北時區 (UTC+8)台灣地區
Asia/Hong_Kong香港時區 (UTC+8)香港特別行政區
Asia/Macau澳門時區 (UTC+8)澳門特別行政區

注意:CST 歧義性極高 (China/US/Cuba/Australia Standard Time),嚴禁使用,務必使用具體 IANA 識別碼。

驗證設定是否生效

<?php
echo '目前時區: ' . date_default_timezone_get() . "<br>";
echo '目前時間: ' . date('Y-m-d H:i:s') . "<br>";
echo '時間戳: ' . time() . "<br>";
// 若無警告輸出,設定成功
?>

常見誤區與排查

誤區正確做法
以為 date('Y-m-d H:i:s') 參數格式錯誤導致警告警告與格式無關,純粹是時區未設定。格式錯誤只會輸出錯誤字串不報警
設定了 date.timezone 但仍報警1. 拼寫錯誤 (如 Asia/Shangai 少 e) 2. 改錯 php.ini (cli vs fpm) 3. 未重啟服務 4. 程式碼中再次呼叫 date_default_timezone_set() 覆蓋
Docker 容器中設定無效在 Dockerfile 中 RUN echo "date.timezone=PRC" >> /usr/local/etc/php/conf.d/timezone.ini

最佳實踐建議

  1. 專案根目錄建立 .user.ini 或 php.ini 設定時區,納入版控
  2. Docker 部署時透過環境變數 PHP_INI_SCAN_DIR 注入時區配置
  3. 框架專案 (Laravel/ThinkPHP/Yii) 在啟動檔統一設定,如 config/app.php 的 'timezone' => 'PRC'
  4. 日誌系統、定時任務、API 回應時間戳全部統一使用 UTC 儲存,顯示層再轉換使用者時區

時區設定是 PHP 專案上線前的必做檢查項。統一使用 PRC 或 Asia/Shanghai,配合 CI/CD 自動驗證,能徹底消除這類低級警告,讓日誌專注於真正的業務錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved