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

PHP 日期時間函式完全手冊:格式化、運算與常見陷阱

     編輯:PHP 相關知識

PHP 日期時間函式完全手冊

PHP 以 Unix Timestamp(1970-01-01 00:00:00 UTC 起的秒數)為核心,提供豐富的日期時間函式族群。本文系統整理格式化字元、核心函式、時間運算技巧與常見坑點,並附上實用程式碼片段。

核心格式化字元速查表(date() / gmdate())

字元說明範例
Y4 位數年份2024
y2 位數年份24
m月份(有前導零)01-12
n月份(無前導零)1-12
F月份英文全名January
M月份英文縮寫Jan
d日期(有前導零)01-31
j日期(無前導零)1-31
l星期幾英文全名Monday
D星期幾英文縮寫Mon
w星期幾數字(0=週日)0-6
H24 小時制(有前導零)00-23
G24 小時制(無前導零)0-23
h12 小時制(有前導零)01-12
g12 小時制(無前導零)1-12
i分鐘(有前導零)00-59
s秒數(有前導零)00-59
aam/pm 小寫am
AAM/PM 大寫PM
UUnix Timestamp1700000000
cISO 8601 格式2024-01-15T12:30:00+08:00
rRFC 2822 格式Mon, 15 Jan 2024 12:30:00 +0800

常用核心函式速覽

  • time():取得當前 Unix Timestamp(整數秒)。
  • microtime(true):取得含微秒的浮點數 Timestamp,適合效能計時。
  • date(string $format, int $timestamp = null):格式化本地時間,$timestamp 省略預設為 time()。
  • gmdate():格式化 GMT/UTC 時間,參數同 date()。
  • mktime(h, i, s, m, d, Y):由日期時間元件建立 Timestamp,自動處理溢位(如月份 13 會進位到下一年)。
  • strtotime(string $time, int $base = null):解析人類可讀的日期字串為 Timestamp,支援相對時間("+1 week"、"next Monday" 等),極為強靈活。
  • getdate(int $timestamp = null):回傳關聯陣列,含 year、mon、mday、hours、minutes、seconds、wday、yday、weekday、month、0(timestamp) 等鍵值。
  • checkdate(m, d, Y):驗證日期合法性(含閏年判斷),回傳布林值。
  • set_time_limit(sec):設定腳本最大執行秒數(0 為無限制),非日期函式但常搭配長時間任務使用。

實戰技巧與常見坑點

1. 字串轉 Timestamp 必用 strtotime()

<?php
$dateStr = "1999-08-05";
$ts = strtotime($dateStr);
echo date("Y", $ts); // 1999
echo date("n", $ts); // 8
?>

錯誤示範: getdate("1999-08-05") 會被視為 timestamp 0,輸出 1970 年。

2. 日期加減運算

<?php
// 今天 +3 天
$threeDaysLater = date("Y-m-d", strtotime("+3 days"));

// 指定日期 +N 天
$specific = "2024-01-15";
$tenDaysLater = date("Y-m-d", strtotime("$specific +10 days"));

// 兩日期相差天數
$start = strtotime("2024-01-01");
$end   = strtotime("2024-01-20");
$diffDays = ($end - $start) / 86400; // 19
?>

3. 閏年、每月天數、年間第幾天

<?php
echo date("L"); // 1=閏年, 0=平年
echo date("t"); // 當月天數 (28-31)
echo date("z"); // 年間第幾天 (0-365)
?>

4. 時區處理(重要)

PHP 預設使用伺服器時區或 php.ini 的 date.timezone。建議在腳本開頭明確設定:

<?php
date_default_timezone_set('Asia/Taipei'); // 或 Asia/Shanghai
echo date("Y-m-d H:i:s"); // 正確的本地時間
?>

跨時區應用建議統一儲存 UTC(用 gmdate() 或 DateTime 物件),顯示時再轉換。

5. DateTime 物件導向介面(PHP 5.2+ 推薦)

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

$dt->modify('+1 month'); // 日期運算更直觀
$diff = $dt->diff(new DateTime('2024-01-01'));
echo $diff->days; // 相差天數
?>

進階函式補充

  • strftime():依 setlocale() 本地化格式化,適合多語系顯示。
  • easter_date()/easter_days():計算復活節日期(1970-2037 年外請用 easter_days())。
  • gmmktime():GMT 版 mktime()。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved