在 PHP 開發中,計算兩個日期之間的天數差異是常見需求,無論是計算會員註冊天數、訂單處理時效,或是活動倒數計時,都需要精準的日期運算。本文將詳細介紹 PHP 計算日期差異的多種方法,並提供實用程式碼範例供參考。
最基礎的方式是將日期字串轉換為 Unix 時間戳,再透過秒數換算天數。
<?php
// 計算今天與指定日期(2016-10-27)相差天數
$date1 = date("Y-m-d");
$date2 = "2016-10-27";
$timestamp1 = strtotime($date1);
$timestamp2 = strtotime($date2);
$days = round(($timestamp1 - $timestamp2) / 3600 / 24);
echo "今天與 2016-10-27 相差 {$days} 天";
echo "<br>";
// 計算今天距離未來日期(2018-09-09)還有幾天
$date1 = date("Y-m-d");
$date2 = "2018-09-09";
$timestamp1 = strtotime($date1);
$timestamp2 = strtotime($date2);
$days = round(($timestamp2 - $timestamp1) / 3600 / 24);
echo "今天到 2018-09-09 還有 {$days} 天";
?>
PHP 內建的 cal_to_jd() 函數可將曆法日期轉換為儒略日數,適合需要高精度或跨曆法計算的場景。
<?php
$startDateArray = explode("/", $myStartDate);
$endDateArray = explode("/", $myEndDate);
$jdStart = cal_to_jd(CAL_GREGORIAN, $startDateArray[1], $startDateArray[0], $startDateArray[2]);
$jdEnd = cal_to_jd(CAL_GREGORIAN, $endDateArray[1], $endDateArray[0], $endDateArray[2]);
$duration = $jdEnd - $jdStart + 1; // 含起迄日
?>
若資料儲存於 MySQL,可直接使用 SQL 函數 DATEDIFF() 計算天數差,減少 PHP 端運算負擔。
<?php // SQL 查詢範例 $sql = "SELECT DATEDIFF(yxdate_star, NOW()) AS days_diff FROM your_table"; // 結果欄位 days_diff 即為 yxdate_star 與當前日期的天數差 ?>
結合上述方法,可輕鬆實現「未來 7 天內到期的合約」或「30 天內過期的會員」等篩選邏輯。
strtotime() 配合算術運算,程式碼簡潔易讀。DateTime 類別(PHP 5.2+),支援時區處理與更豐富的日期操作。DATEDIFF() 或 BETWEEN 完成初步過濾。更多 PHP 進階技巧請參考:PHP 面向物件程式設計入門、PHP 字串操作總結、PHP + MySQL 資料庫操作實戰、PHP 常見資料庫操作技巧匯總。