計算日期天數差是常見需求。本文提供一個可復用的 diffBetweenTwoDays() 函數,支援任意順序傳入日期,自動處理時間戳轉換與絕對值計算。
<?php
/**
* 計算兩個日期之間相差的天數(針對 1970-01-01 之後的日期)
*
* @param string $day1 日期字串,格式如 'Y-m-d'
* @param string $day2 日期字串
* @return float 相差天數(含小數,若需整數請自行 floor/ceil/round)
*/
function diffBetweenTwoDays(string $day1, string $day2): float {
$ts1 = strtotime($day1);
$ts2 = strtotime($day2);
// 確保 $ts1 >= $ts2
if ($ts1 < $ts2) {
[$ts1, $ts2] = [$ts2, $ts1]; // PHP 7.1+ 解構賦值交換
}
return ($ts1 - $ts2) / 86400; // 86400 秒 = 1 天
}
// 使用範例
$day1 = '2013-07-27';
$day2 = '2013-08-04';
$diff = diffBetweenTwoDays($day1, $day2);
echo "相差 $diff 天\n"; // 輸出:相差 8 天
?>
strtotime() 受 date_default_timezone_set() 影響,建議函數開頭設定 UTC 或固定時區。strtotime() 不支援 1970 年前,64 位元 PHP 7+ 可支援更早日期。極早期日期建議用 DateTime。(int) 或 round()。<?php
function diffDaysModern(string $day1, string $day2): int {
$dt1 = new DateTime($day1);
$dt2 = new DateTime($day2);
$interval = $dt1->diff($dt2);
return $interval->days; // 直接取得整數天數
}
echo diffDaysModern('2013-07-27', '2013-08-04'); // 8
?>
DateTime::diff() 自動處理閏年、時區、夏令時間等複雜情況,且回傳整數天數,更直觀可靠。
簡單專案可用 strtotime() 秒數相減法,正式專案建議改用 DateTime 類別。封裝成函數便於複用與維護。希望本文對您的 PHP 程式設計有所幫助。