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

PHP 時區設定錯誤導致時間偏移 8 小時:成因與三種修正方案

     編輯:PHP 相關知識

現象

echo date('Y-m-d H:i:s'); 輸出時間比本地時間(北京時間 UTC+8)慢 8 小時。

根本原因

PHP 預設使用 **UTC(格林威治標準時間)**。中國位於東八區(UTC+8),故相差 8 小時。

方案一:修改 php.ini(永久生效,推薦生產環境)

; 找到 ;date.timezone
date.timezone = PRC

PRC 代表中華人民共和國,等同於 Asia/Shanghai。修改後**必須重啟 Web 伺服器**(Apache/Nginx + PHP-FPM)。

方案二:腳本內動態設定(臨時/共享主機無法改 php.ini)

<?php
// 在所有日期時間函數之前呼叫
date_default_timezone_set('Asia/Shanghai');
// 或 PRC
echo date('Y-m-d H:i:s'); // 正確輸出北京時間
?>

方案三:ini_set(運行時修改配置)

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

驗證與除錯

<?php
echo '預設時區: ' . date_default_timezone_get() . PHP_EOL;
echo '當前時間: ' . date('Y-m-d H:i:s') . PHP_EOL;
echo '時間戳: ' . time() . PHP_EOL;
// 時間戳不受時區影響,永遠是 UTC 秒數
?>

常見誤區

  • ❌ date('Y-m-d H:i:s', time() + 8*3600) — 夏令時/閏秒會出錯,不可取
  • ❌ 只在部分文件設定時區 — 應在**入口文件/框架啟動階段**統一設定
  • ❌ 使用縮寫 CST — 歧義大(可能指中國/美國/澳洲標準時間),必須用 Asia/Shanghai

框架整合範例

// Laravel: config/app.php
'timezone' => 'Asia/Shanghai',

// Symfony: config/packages/framework.yaml
framework:
    php_timezone: 'Asia/Shanghai'

// ThinkPHP: config/app.php
'default_timezone' => 'Asia/Shanghai',

總結

**時區設定是專案初始化的必做項**。統一使用 Asia/Shanghai,在入口文件最早處設定,配合框架配置,徹底杜絕時間偏移 Bug。

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