如何使用 PHP 計算兩個日期之間的差

  1. 使用 strtotime() 計算 5.3 以下 PHP 版本的兩個日期之間的差異
  2. 使用 PHP 5.3 及更高版本中的 DateTime()DateInterval() 的物件

PHP 中有幾種方法可以計算兩個日期之間的差。本文將介紹如何使用<5.3 以下的 PHP 版本以及較新版本>5.3 的計算日期之間差異的方法。

使用 strtotime() 計算 5.3 以下 PHP 版本的兩個日期之間的差異

strtotime() 將兩個日期轉換為 UNIX 時間,並從中計算出秒數。由此,用秒計算不同的方法會更容易。該函式接受英語的字串引數,該引數顯示日期時間的描述。

例:

$firstDate = "2019-01-01";
$secondDate = "2020-03-04";

$dateDifference = abs(strtotime($secondDate) - strtotime($firstDate));

$years  = floor($dateDifference / (365 * 60 * 60 * 24));
$months = floor(($dateDifference - $years * 365 * 60 * 60 * 24) / (30 * 60 * 60 * 24));
$days   = floor(($dateDifference - $years * 365 * 60 * 60 * 24 - $months * 30 * 60 * 60 *24) / (60 * 60 * 24));

echo $years." year,  ".$months." months and ".$days." days";

//output: 1 year, 2 months and 3 days

上例使用幾個函式(如 abs()floor(),當然最主要的是 strtotime())來得出兩個日期的差。

strtotime() 獲取日期的 UNIX 秒值,並使用 abs() 獲取第一個日期的絕對值。

函式 floor() 用於將秒數舍入到最接近的整數。

要獲得年份,需要 365 天乘以 60 分鐘,60 秒和 24 小時,然後將其除以差異。

要獲得月份,需將 30 天乘以 60 分鐘,60 秒和 24 小時,然後將其除以日期差乘以年份和 365 天,60 分鐘,60 秒和 24 小時的差。

然後,要獲得日期差,請乘以 60 分鐘,60 秒和 24 小時,然後將其除以日期差的差,年,365 天,60 分鐘,60 秒和 24 小時的乘積以及月,30 天的乘積,60 分 60 秒和 24 小時。

最後,將所有內容放到一個變數中以顯示最終差異。

使用 PHP 5.3 及更高版本中的 DateTime()DateInterval() 的物件

此方法是一種物件導向的方式,用於獲取兩個日期之間的差值,這也是最簡單的方法,因為它不需要手動計算日期,因此我們推薦在 PHP >5.3 版本中使用這種方法。

例:

$firstDate  = new DateTime("2019-01-01");
$secondDate = new DateTime("2020-03-04");
$intvl = $firstDate->diff($secondDate);

echo $intvl->y . " year, " . $intvl->m." months and ".$intvl->d." day"; 
echo "<br>";
// Total amount of days
echo $intvl->days . " days ";

//output: 1 year, 2 months and 1 day
//        428 days

在上面的示例中,與上面的使用 strtotime() 和更多其他函式和計算不同,DateTime()DateInterval() 物件使用起來更加容易。

首先,使用 new DateTime() 宣告日期。然後,在第一個日期使用 DateInterval() 物件的 diff() 方法來獲得差值的整數值,並將第二個日期作為引數傳遞。

最後,要獲取年份,只需使用物件 y。使用 m 獲取月份,使用 d 獲取天數。

相關文章 - PHP Date

  • 如何在 PHP 中將一種日期格式轉換為另一種日期格式
  • 如何在 PHP 中將字串轉換為日期和日期時間
  • 相關文章 - PHP DateTime

  • 如何在 PHP 中將一種日期格式轉換為另一種日期格式
  • 如何在 PHP 中將 DateTime 轉換為字串