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

PHP strtotime() 時區錯誤導致時間相差 8 小時完美修復

     編輯:PHP 相關知識

錯誤現象

date()、strtotime() 輸出時間比本地時間少 8 小時(GMT/UTC 時間),報警:PHP Warning: strtotime(): It is not safe to rely on the system's timezone settings...

根本原因

PHP 5.1+ 引入 date.timezone 配置,默認關閉,導致所有日期函數使用 UTC 時間。

方案一:修改 php.ini(永久生效)

; 找到並取消註釋
date.timezone = PRC

; 或具體城市
date.timezone = Asia/Shanghai
date.timezone = Asia/Chongqing
date.timezone = Asia/Hong_Kong
date.timezone = Asia/Taipei

中國常用時區標識符

標識符地區UTC偏移
PRC中國大陸+08:00
Asia/Shanghai上海+08:00
Asia/Chongqing重慶+08:00
Asia/Urumqi烏魯木齊+06:00(實際+08:00)
Asia/Hong_Kong香港+08:00
Asia/Macao澳門+08:00
Asia/Taipei台北+08:00

方案二:代碼動態設置(臨時/共享主機)

<?php
// 放在所有日期函數調用之前
date_default_timezone_set('Asia/Shanghai');
// 或 PRC
date_default_timezone_set('PRC');

echo date('Y-m-d H:i:s'); // 正確輸出本地時間
?>

方案三:運行時配置

ini_set('date.timezone', 'Asia/Shanghai');

驗證腳本

<?php
echo "配置時區: " . date_default_timezone_get() . "<br>";
echo "當前時間: " . date('Y-m-d H:i:s') . "<br>";
echo "時間戳: " . time() . "<br>";
echo "strtotime測試: " . date('Y-m-d H:i:s', strtotime('2024-01-01 12:00:00')) . "<br>";
?>

避坑指南

  • 修改 php.ini 後必須重啟 Web 服務
  • 共享主機無法改 php.ini 時,在入口文件最頂部調用 date_default_timezone_set()
  • 數據庫連接時同步設置:SET time_zone = '+08:00' (MySQL)
  • 框架通常有統一配置(Laravel: config/app.php → timezone)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved