首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 日期加減運算實作:strtotime 與 date 組合技巧

     編輯:PHP 綜合知識

核心邏輯三步驟

  1. 使用 strtotime() 將日期字串轉為 Unix 時間戳(秒數)。
  2. 以秒數進行加減:目標時間戳 = 基準時間戳 ± 天數 × 86400(86400 = 24×60×60)。
  3. 用 date() 將結果時間戳格式化為所需字串。

基本範例:取得 2012-05-01 前一天

<?php
$date = strtotime('2012-5-1');          // 步驟 1
echo date('Y-m-d', $date - 86400);      // 步驟 2+3,輸出 2012-04-30
?>

常用相對日期寫法(strtotime 支援英文自然語言)

需求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 monthPHP 5.3+ 支援
這個月最後一天last day of this monthPHP 5.3+ 支援

進階技巧

1. 避免夏令時間/閏秒陷阱

直接加減 86400 秒在跨越夏令時間切換日會偏移 1 小時。建議使用 DateTime 類別(PHP 5.2+):

$dt = new DateTime('2012-05-01');
$dt->modify('-1 day');
echo $dt->format('Y-m-d'); // 正確處理 DST

2. 只運算日期不帶時間

$dt = new DateTime('2012-05-01 14:30:00');
$dt->setTime(0, 0); // 歸零時間
$dt->modify('-1 day');
echo $dt->format('Y-m-d');

3. 取得當月天數

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 年問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved