首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 計算兩個日期相差天數的函數實作

     編輯:PHP 相關知識

前言

計算日期天數差是常見需求。本文提供一個可復用的 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 或固定時區。
  • 1970 年前日期:32 位元系統 strtotime() 不支援 1970 年前,64 位元 PHP 7+ 可支援更早日期。極早期日期建議用 DateTime。
  • 回傳浮點數:若日期包含時間部分,結果會有小數。純日期字串通常可整除,但建議呼叫端自行 (int) 或 round()。

現代寫法:使用 DateTime::diff()(推薦 PHP 5.3+)

<?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 程式設計有所幫助。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved