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

PHP 常用日期時間與時區處理函式速查表

     編輯:PHP 相關知識

PHP 日期時間核心函式:從時間戳到格式化輸出的完整指南

日期時間處理是 PHP 開發的高頻需求。本文整理 time()、date()、時區設定、時間戳轉換等核心函式用法,並補充實務常見坑點與最佳實踐。

一、取得當前時間戳

echo time(); // 例:1705315200(自 1970-01-01 00:00:00 UTC 起的秒數)

注意:time() 回傳整數秒,非毫秒。若需毫秒,用 microtime(true)。

二、格式化輸出日期時間

echo date('Y-m-d H:i:s'); // 2024-01-15 14:30:45

常用格式字元

三、時區處理:避免「時間對不上」

3.1 取得當前預設時區

echo date_default_timezone_get(); // 輸出如 UTC、Asia/Shanghai

3.2 設定預設時區(建議在 bootstrap 階段統一設定)

date_default_timezone_set('Asia/Shanghai'); // 設為中國標準時間(UTC+8)
echo date('Y-m-d H:i:s'); // 現在會顯示正確的本地時間

最佳實踐:在 php.ini 設定 date.timezone = Asia/Shanghai,或在框架啟動檔(如 index.php、config/main.php)統一呼叫 date_default_timezone_set(),避免分散在各處造成不一致。

四、時間戳 ↔ 日期字串互轉

4.1 時間戳 → 格式化日期

$ts = time();
echo date('Y-m-d H:i:s', $ts); // 指定時間戳
echo date('Y-m-d H:i:s', strtotime('+1 day')); // 相對時間

4.2 日期字串 → 時間戳

$ts = strtotime('2024-01-15 14:30:45');
$ts = strtotime('next Monday');
$ts = strtotime('first day of this month');

strtotime() 解析英文文字日期描述,極其強大但需注意:

  • 輸入格式不明確時可能產生歧義(如 01/02/2024 美式/英式不同)。
  • 建議統一使用 ISO 8601 格式 YYYY-MM-DD 或 YYYY-MM-DD HH:MM:SS。

五、DateTime 物件導向介面(PHP 5.2+ 推薦)

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

// 修改時間
$dt->modify('+1 week');
$dt->setTime(9, 0, 0);

// 計算差值
$dt1 = new DateTime('2024-01-01');
$dt2 = new DateTime('2024-01-15');
$diff = $dt1->diff($dt2);
echo $diff->days; // 14
echo $diff->format('%a 天 %h 小時 %i 分鐘');

優勢:支援時區物件、不可變版本 DateTimeImmutable、方法鏈結、更直觀的差值計算。

六、常見陷阱與解決方案

字元說明範例
Y四位數年份2024
m兩位數月份01
d兩位數日期15
H24 小時制小時14
i分鐘30
s秒45
w星期(0=週日)1
W年度第幾週03
t當月總天數31
現象原因解決
儲存到 DB 的時間比實際少 8 小時DB 連線時區與 PHP 時區不一致連線時執行 SET time_zone = '+08:00' 或統一存 UTC
date() 警告:It is not safe to rely on the system's timezone settings未設定時區設定 php.ini 或呼叫 date_default_timezone_set()
strtotime('2024-02-30') 回傳 3 月 1 日自動修正無效日期輸入前驗證,或用 DateTime::createFromFormat() 嚴格解析
跨 DST(日光節約時間)計算錯誤直接加減秒數使用 DateTime::modify() 或 DateInterval

七、總結

  • 核心函式:time()、date()、strtotime()、date_default_timezone_set()。
  • 新專案優先使用 DateTime 類別,功能更完整、時區處理更安全。
  • 系統層面統一使用 UTC 存儲,顯示層按使用者時區轉換。
  • 所有使用者輸入的日期字串,務必用 DateTime::createFromFormat() 指定格式解析,拒絕模糊輸入。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved