PHP Conference Japan 2024

DateTimeInterface::diff

DateTimeImmutable::diff

DateTime::diff

date_diff

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

DateTimeInterface::diff -- DateTimeImmutable::diff -- DateTime::diff -- date_diff返回兩個 DateTime 物件的差異

說明

物件導向風格

public DateTimeInterface::diff(DateTimeInterface $targetObject, bool $absolute = false): DateInterval
公開 DateTimeImmutable::diff(DateTimeInterface $targetObject, 布林值 $absolute = false): DateInterval
公開 DateTime::diff(DateTimeInterface $targetObject, 布林值 $absolute = false): DateInterval

程序式風格

date_diff(DateTimeInterface $baseObject, DateTimeInterface $targetObject, 布林值 $absolute = false): DateInterval

返回兩個 DateTimeInterface 物件的差異。

參數

datetime

要比較的日期。

absolute

區間是否應強制為正值?

回傳值

DateInterval 物件表示兩個日期之間的差異。

absolute 參數只會影響 DateInterval 物件的 invert 屬性。

更具體地說,回傳值表示套用到原始物件 ($this$originObject) 以得出 $targetObject 的時間間隔。這個過程並非總是可逆的。

此方法會考慮到日光節約時間的轉換,因此可以返回 `24 小時 30 分鐘` 的間隔,如其中一個範例所示。如果您想使用絕對時間進行計算,則需要先將 $this/$baseObject$targetObject 轉換為 UTC。

範例

範例 #1 DateTimeImmutable::diff() 範例

物件導向風格

<?php
$origin
= new DateTimeImmutable('2009-10-11');
$target = new DateTimeImmutable('2009-10-13');
$interval = $origin->diff($target);
echo
$interval->format('%R%a 天');
?>

程序式風格

<?php
$origin
= date_create('2009-10-11');
$target = date_create('2009-10-13');
$interval = date_diff($origin, $target);
echo
$interval->format('%R%a days');
?>

以上範例會輸出

+2 days

範例 #2 在日光節約時間轉換期間使用 DateTimeInterface::diff()

<?php
$originalTime
= new DateTimeImmutable("2021-10-30 09:00:00 Europe/London");
$targetTime = new DateTimeImmutable("2021-10-31 08:30:00 Europe/London");
$interval = $originalTime->diff($targetTime);
echo
$interval->format("%H:%I:%S (完整天數: %a)"), "\n";
?>

以上範例會輸出

24:30:00 (Full days: 0)

範例 #3 DateTimeInterface::diff() 的範圍

這個方法回傳的值是從 $this$targetObject 的確切時間量。比較 1 月 1 日到 12 月 31 日會回傳 364 天,而不是 365 天(對於非閏年而言)。

<?php
$originalTime
= new DateTimeImmutable("2023-01-01 UTC");
$targetTime = new DateTimeImmutable("2023-12-31 UTC");
$interval = $originalTime->diff($targetTime);
echo
"完整天數: ", $interval->format("%a"), "\n";
?>

以上範例會輸出

Full days: 364

範例 #4 DateTime 物件比較

注意事項:

DateTimeImmutableDateTime 物件可以使用 比較運算子 進行比較。

<?php
$date1
= new DateTime("now");
$date2 = new DateTime("tomorrow");

var_dump($date1 == $date2);
var_dump($date1 < $date2);
var_dump($date1 > $date2);
?>

以上範例會輸出

bool(false)
bool(true)
bool(false)

另請參閱

  • DateInterval::format() - 格式化時間間隔
  • DateTime::add() - 修改 DateTime 物件,加上指定的天數、月數、年數、小時數、分鐘數和秒數
  • DateTime::sub() - 從 DateTime 物件中減去指定的天數、月數、年數、小時數、分鐘數和秒數
新增註釋

使用者貢獻的註釋

此頁面沒有使用者貢獻的註釋。
To Top