(PHP 5 >= 5.3.0, PHP 7, PHP 8)
DateTimeInterface::diff -- DateTimeImmutable::diff -- DateTime::diff -- date_diff — 返回兩個 DateTime 物件的差異
物件導向風格
$targetObject
, bool $absolute
= false
): DateInterval程序式風格
$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 物件比較
注意事項:
DateTimeImmutable 和 DateTime 物件可以使用 比較運算子 進行比較。
<?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)