strtotime() 將日期字串轉為 Unix 時間戳(秒數)。目標時間戳 = 基準時間戳 ± 天數 × 86400(86400 = 24×60×60)。date() 將結果時間戳格式化為所需字串。<?php
$date = strtotime('2012-5-1'); // 步驟 1
echo date('Y-m-d', $date - 86400); // 步驟 2+3,輸出 2012-04-30
?>
| 需求 | strtotime 參數 | 說明 |
|---|---|---|
| 明天 | +1 day 或 tomorrow | +86400 秒 |
| 昨天 | -1 day 或 yesterday | -86400 秒 |
| 下週同一時間 | +1 week | +604800 秒 |
| 上週同一時間 | -1 week | -604800 秒 |
| 下個星期四 | next Thursday | 下一個 Thursday 00:00:00 |
| 上個星期四 | last Thursday | 上一個 Thursday 00:00:00 |
| 下個月第一天 | first day of next month | PHP 5.3+ 支援 |
| 這個月最後一天 | last day of this month | PHP 5.3+ 支援 |
直接加減 86400 秒在跨越夏令時間切換日會偏移 1 小時。建議使用 DateTime 類別(PHP 5.2+):
$dt = new DateTime('2012-05-01');
$dt->modify('-1 day');
echo $dt->format('Y-m-d'); // 正確處理 DST
$dt = new DateTime('2012-05-01 14:30:00');
$dt->setTime(0, 0); // 歸零時間
$dt->modify('-1 day');
echo $dt->format('Y-m-d');
echo date('t', strtotime('2012-02')); // 29(閏年)
strtotime('+N day') 可讀性最高。DateTime + 自訂迴圈或套件(如 briofy/working-hours)。array_map('date', ...) 格式化,減少函式呼叫開銷。strtotime() 配合 date() 是 PHP 日期加減最直觀的寫法,但需注意夏令時間與時區設定(date_default_timezone_set())。現代專案建議優先使用 DateTime/DateTimeImmutable 物件導向介面,功能更強且避免 32 位元系統 2038 年問題。