PHP 計算兩個日期間的天數差,核心在於將日期轉為 Unix 時間戳(秒數)再換算。本文說明標準做法與常見誤區。
<?php
// 起訖日期:1998-05-03 至 1999-06-05
$start = mktime(0, 0, 0, 5, 3, 1998);
$end = mktime(0, 0, 0, 6, 5, 1999);
// 秒數差除以一天秒數 (86400)
$days = round(($end - $start) / 86400);
echo $days; // 輸出: 398
?>
mktime(時, 分, 秒, 月, 日, 年) 參數順序易混淆,建議改用 strtotime()86400 (60×60×24) 而非 3600/24 分步運算,精度更高round() 四捨五入處理夏令時間導致的 23/25 小時誤差<?php
$start = new DateTime('1998-05-03');
$end = new DateTime('1999-06-05');
$diff = $start->diff($end);
echo $diff->days; // 直接取得天數差
?>
DateTime::diff() 取得年/月/日)date_default_timezone_set())