PHP 以 Unix Timestamp(1970-01-01 00:00:00 UTC 起的秒數)為核心,提供豐富的日期時間函式族群。本文系統整理格式化字元、核心函式、時間運算技巧與常見坑點,並附上實用程式碼片段。
| 字元 | 說明 | 範例 |
|---|---|---|
| Y | 4 位數年份 | 2024 |
| y | 2 位數年份 | 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 |
| H | 24 小時制(有前導零) | 00-23 |
| G | 24 小時制(無前導零) | 0-23 |
| h | 12 小時制(有前導零) | 01-12 |
| g | 12 小時制(無前導零) | 1-12 |
| i | 分鐘(有前導零) | 00-59 |
| s | 秒數(有前導零) | 00-59 |
| a | am/pm 小寫 | am |
| A | AM/PM 大寫 | PM |
| U | Unix Timestamp | 1700000000 |
| c | ISO 8601 格式 | 2024-01-15T12:30:00+08:00 |
| r | RFC 2822 格式 | Mon, 15 Jan 2024 12:30:00 +0800 |
$timestamp 省略預設為 time()。date()。"+1 week"、"next Monday" 等),極為強靈活。year、mon、mday、hours、minutes、seconds、wday、yday、weekday、month、0(timestamp) 等鍵值。<?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 年。
<?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
?>
<?php
echo date("L"); // 1=閏年, 0=平年
echo date("t"); // 當月天數 (28-31)
echo date("z"); // 年間第幾天 (0-365)
?>
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 物件),顯示時再轉換。
<?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; // 相差天數
?>
setlocale() 本地化格式化,適合多語系顯示。easter_days())。mktime()。