date(format, timestamp) 是 PHP 格式化日期時間的核心函數。第二個參數可選,默認為當前時間戳。以下是常用格式字符對照表:
| 字符 | 說明 | 範例輸出 |
|---|---|---|
| Y | 4 位數年份 | 2024 |
| y | 2 位數年份 | 24 |
| m | 數字月份,補零 | 01-12 |
| n | 數字月份,不補零 | 1-12 |
| F | 月份英文全稱 | January |
| M | 月份英文縮寫 | Jan |
| d | 日期,補零 | 01-31 |
| j | 日期,不補零 | 1-31 |
| H | 24 小時制,補零 | 00-23 |
| h | 12 小時制,補零 | 01-12 |
| i | 分鐘,補零 | 00-59 |
| s | 秒,補零 | 00-59 |
| U | Unix 時間戳(秒) | 1704067200 |
| w | 星期幾(數字) | 0(日)-6(六) |
| l | 星期幾英文全稱 | Monday |
| D | 星期幾英文縮寫 | Mon |
| S | 日期序數後綴 | st, nd, rd, th |
| a/A | am/pm 或 AM/PM | am / AM |
| z | 年間第幾天 | 0-365 |
計算兩日期相差天數的經典方法:
<?php
$start = '2024-01-01';
$end = '2024-12-31';
$diff = floor((strtotime($end) - strtotime($start)) / 86400);
echo "相差 $diff 天"; // 輸出:相差 365 天
?>
原理:strtotime() 將日期字符串轉為 Unix 時間戳(秒),相減得秒數差,除以 86400(一天秒數),floor() 向下取整。
PHP 5.2+ 推薦使用面向對象的 DateTime 及 DateInterval,功能更強、時區處理更準確:
<?php
$dt1 = new DateTime('2024-01-01');
$dt2 = new DateTime('2024-12-31');
$interval = $dt1->diff($dt2);
echo $interval->format('%a 天'); // 365 天
// 格式化輸出
echo $dt1->format('Y-m-d H:i:s'); // 2024-01-01 00:00:00
// 時區設置
$dt = new DateTime('now', new DateTimeZone('Asia/Taipei'));
echo $dt->format('Y-m-d H:i:s');
?>
優勢:支持時區、夏令時、大數值日期(Year 2038 問題)、鏈式操作、差值精確到年/月/日/時/分/秒。