將日期字串轉為 Unix 時間戳 (秒),相減除以 86400 (一天秒數) 即得天數差。適用於 1970-01-01 之後的日期。
function diffDays($day1, $day2) {
$t1 = strtotime($day1);
$t2 = strtotime($day2);
if ($t1 === false || $t2 === false) return false;
return abs($t1 - $t2) / 86400;
}
echo diffDays("2013-07-27", "2013-08-04"); // 8
function diffDaysDT($day1, $day2) {
$d1 = new DateTime($day1);
$d2 = new DateTime($day2);
$interval = $d1->diff($d2);
return (int)$interval->format('%a'); // 總天數
}
DateTimeImmutable 更安全diff($d2)->days 或 %a:不包含 端點 (27 到 28 差 1 天)return $interval->days + 1;strtotime 速度極快,適合大量計算DateTime::diff 較慢但功能完整現代專案請優先使用 DateTime,避免時區與 1970 年前問題。