strtotime() 支援自然語言時間描述,是 PHP 日期運算的核心函數。以下為常用相對日期語法與對應時間戳/格式化輸出速查。
<?php
date_default_timezone_set('Asia/Taipei'); // 設定時區(重要)
echo "今天: " . date('Y-m-d') . '<br>';
echo "昨天: " . date('Y-m-d', strtotime('-1 day')) . '<br>';
echo "明天: " . date('Y-m-d', strtotime('+1 day')) . '<br>';
echo "一週後: " . date('Y-m-d', strtotime('+1 week')) . '<br>';
echo "下個禮拜四: " . date('Y-m-d', strtotime('next Thursday')) . '<br>';
echo "上個禮拜一: " . date('Y-m-d', strtotime('last Monday')) . '<br>';
echo "一個月前: " . date('Y-m-d', strtotime('last month')) . '<br>';
echo "一個月後: " . date('Y-m-d', strtotime('+1 month')) . '<br>';
echo "十年後: " . date('Y-m-d', strtotime('+10 year')) . '<br>';
echo "複雜組合: " . date('Y-m-d H:i:s', strtotime('+1 week 2 days 4 hours 2 seconds')) . '<br>';
?>
| 需求 | strtotime 參數 | 說明 |
|---|---|---|
| 昨天 | -1 day / yesterday | 相減 24 小時 |
| 前天 | -2 day | |
| 明天 | +1 day / tomorrow | |
| 一週後 | +1 week | |
| 一週前 | -1 week | |
| 下個禮拜三 | next Wednesday | 下一個出現的周三 |
| 上個禮拜五 | last Friday | 上一個出現的周五 |
| 月初 | first day of this month | PHP 5.3+ |
| 月末 | last day of this month | PHP 5.3+ |
| 下月初 | first day of next month | |
| 上月末 | last day of last month | |
| 特定時間 | 2023-12-25 12:00:00 | 標準格式 |
<?php
// 使用時間戳運算
$now = time();
$yesterday = $now - 86400; // 24*60*60
$tomorrow = $now + 86400;
$nextWeek = $now + 7 * 86400;
// 使用 mktime 組裝
$yesterday = mktime(0, 0, 0, date('m'), date('d') - 1, date('Y'));
$tomorrow = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y'));
// 使用 DateTime 物件 (PHP 5.2+,推薦)
$dt = new DateTime();
$dt->modify('-1 day');
echo $dt->format('Y-m-d');
?>
date_default_timezone_set() 或 php.ini date.timezone,否則預設 UTC 導致日期偏移。strtotime('+1 month') 在 1/31 會得到 3/3(非 2/28),邏輯為「月份+1,日期不變,超出天數自動推算」。精確月份運算建議用 DateTime::modify('first day of next month')。time() + 算術最快,strtotime() 解析字串稍慢,DateTime 物件最重但功能最完整。