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

PHP date() 時間相差 8 小時?時區配置完全指南

     編輯:PHP 相關知識

現象

date('Y-m-d H:i:s') 輸出的時間比服務器系統時間早/晚 8 小時(通常為 UTC vs CST 差值)。

根因

PHP 5.1+ 要求腳本**必須**顯式設置時區,否則默認使用 UTC。date()、time()、strtotime() 等所有日期時間函數均受影響。

三種設置方式(優先級遞減)

1. php.ini 全局生效(推薦生產環境)

; 找到 [Date] 區段
date.timezone = Asia/Shanghai
; 或 PRC(中國標準時間別名)

修改後 **重啟 PHP-FPM / Apache**。

2. 運行時動態設置(推薦開發/兼容舊代碼)

<?php
// 腳本最頂部,任何 date/time 函數調用之前
date_default_timezone_set('Asia/Shanghai'); // 或 'PRC'
echo date('Y-m-d H:i:s'); // 正確輸出本地時間

3. ini_set() 設置(效果同 2)

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

常見時區標識符對照

地區標識符別名
中國大陸Asia/ShanghaiPRC, Asia/Chongqing, Asia/Harbin
中國香港Asia/Hong_Kong
中國台灣Asia/Taipei
新加坡Asia/Singapore
UTCUTCGMT

完整列表見 PHP 官方時區列表。

驗證腳本

<?php
date_default_timezone_set('Asia/Shanghai');
echo 'date.timezone ini: ' . ini_get('date.timezone') . PHP_EOL;
echo 'date(): ' . date('Y-m-d H:i:s') . PHP_EOL;
echo 'time(): ' . time() . PHP_EOL;
echo 'strtotime("now"): ' . strtotime('now') . PHP_EOL;
$dt = new DateTime();
echo 'DateTime: ' . $dt->format('Y-m-d H:i:s') . PHP_EOL;

進階:DateTime 物件導向用法(推薦)

$dt = new DateTime('now', new DateTimeZone('Asia/Shanghai'));
echo $dt->format('Y-m-d H:i:s');

// 時區轉換
$utc = new DateTime('now', new DateTimeZone('UTC'));
$utc->setTimezone(new DateTimeZone('Asia/Shanghai'));
echo $utc->format('Y-m-d H:i:s');

避坑提醒

  • 不要在類構造函數、佇列任務、定時任務中假設時區已設置,**每個入口腳本頂部統一設置**。
  • Docker 容器需設置 ENV TZ=Asia/Shanghai 或掛載 /etc/timezone、/etc/localtime。
  • 數據庫連接單獨設置:SET time_zone = '+08:00' 或 PDO MYSQL_ATTR_INIT_COMMAND。

總結

「相差 8 小時」= 未設置時區導致默認 UTC。在 **腳本入口第一行** 加上 date_default_timezone_set('Asia/Shanghai') 或配置 php.ini,問題即刻解決。

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