日期差值計算是常見需求,本文總結三種主流方法並分析優劣。
<?php
// 過去天數
$Date_1 = date("Y-m-d");
$Date_2 = "2016-10-27";
$d1 = strtotime($Date_1);
$d2 = strtotime($Date_2);
$Days = round(($d1 - $d2) / 3600 / 24);
echo "今天與 2016-10-27 相差 {$Days} 天<br>";
// 未來天數
$Date_2 = "2018-09-09";
$d2 = strtotime($Date_2);
$Days = round(($d2 - $d1) / 3600 / 24);
echo "今天到 2018-09-09 還有 {$Days} 天";
優點:代碼簡潔、支持任意日期格式、性能好。
注意:round 處理夏令時導致的非整數天數。
$arrayStartDate = explode("/", $myStartDate); // 月/日/年
$arrayEndDate = explode("/", $myEndDate);
$jdStart = cal_to_jd(CAL_GREGORIAN, $arrayStartDate[1], $arrayStartDate[0], $arrayStartDate[2]);
$jdEnd = cal_to_jd(CAL_GREGORIAN, $arrayEndDate[1], $arrayEndDate[0], $arrayEndDate[2]);
$duration = $jdEnd - $jdStart + 1; // 含首尾
優點:歷史日期精確、無時區影響。
缺點:格式固定需手動拆分。
SELECT DATEDIFF(yxdate_star, NOW()) AS days_diff FROM table;
返回正數表示未來,負數表示過去。適合直接在 SQL 中篩選「N 天內到期」記錄。
strtotime,配合 DateTime 類(PHP 5.3+)更面向對象DATEDIFF掌握多種方法,根據業務場景靈活選擇。