PHP 時間函數核心是 Unix Timestamp:從 1970-01-01 00:00:00 UTC 至今的秒數。
time()strtotime('2024-01-01') 或 mktimes()| 字元 | 說明 | 範例 |
|---|---|---|
| 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 |
| 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 |
| D | 星期縮寫 | Mon |
| l | 星期全名 | Monday |
| w | 星期數字 | 0(日)-6(六) |
| z | 年間第幾天 | 0-365 |
| t | 該月總天數 | 28-31 |
| U | Unix 時間戳 | 1704067200 |
| S | 英文序數後綴 | st, nd, rd, th |
<?php
$t = time();
echo date("Y-m-d H:i:s", $t); // 2024-01-01 12:30:45
echo date("Y/m/d", $t); // 2024/01/01
echo date("l, F jS, Y", $t); // Monday, January 1st, 2024
echo date("H:i", $t); // 12:30
echo date("Y-m-d", strtotime("-1 day")); // 昨天
echo date("Y-m-d", strtotime("+1 week")); // 下週同天
echo date("Y-m-d", strtotime("first day of this month")); // 本月1號
?>
+1 day, -1 day+1 week, -2 weeks+1 month, last day of next monthnext Monday, last Fridayfirst day of this month<?php
$dt = new DateTime('now', new DateTimeZone('Asia/Taipei'));
echo $dt->format('Y-m-d H:i:s');
$dt->modify('+1 day');
echo $dt->format('Y-m-d');
$diff = $dt->diff(new DateTime('2024-12-31'));
echo $diff->days . ' 天';
優點:時區處理直觀、支援大於 2038 年的日期、鏈式操作。
date.timezone 或系統時區,建議程式碼開頭設定 date_default_timezone_set('Asia/Taipei')。strtotime 對「下個月同一天」在 31 號會跳到下月 1 號(如 1/31 +1 month = 3/3),用 first day of next month 避免。date() 受限 32 位元系統 2038 年問題,長期專案請用 DateTime。