計算兩個日期之間的天數差是常見需求。PHP 的 strtotime() 能將英文日期字串轉換為 Unix 時間戳(秒數),再以一天 86400 秒換算天數。本文說明正確用法並修正原文中的程式碼錯誤。
FALSE(PHP 5.1.0 前返回 -1)。TZ 影響,建議配合 date_default_timezone_set() 使用。<?php
// 設定時區避免誤差
date_default_timezone_set('Asia/Taipei');
$date1 = '2024-01-15';
$date2 = '2024-01-01';
// 取得時間戳
$ts1 = strtotime($date1);
$ts2 = strtotime($date2);
// 計算絕對天數差
$days = abs($ts1 - $ts2) / 86400;
echo "兩日期相差 $days 天"; // 輸出:兩日期相差 14 天
?>
原文程式碼 (strtotime() - strtotime()) / (60*60*24) 缺少參數,正確寫法應傳入日期字串。此外,直接相減可能得到負數,建議使用 abs() 取絕對值。
<?php
$dt1 = new DateTime('2024-01-15');
$dt2 = new DateTime('2024-01-01');
$interval = $dt1->diff($dt2);
echo $interval->days . ' 天'; // 更精確,自動處理閏年、時區
?>
DateTime::diff() 返回 DateInterval 物件,提供更豐富的日期差資訊(年、月、日、時、分、秒)。
雖然 strtotime() 配合秒數換算可快速得到天數差,但現代 PHP 專案建議使用 DateTime 類別,功能更強大且避免時區陷阱。希望本文對您的 PHP 程式設計有所幫助。