(PHP 5 >= 5.3.0, PHP 7, PHP 8)
DateTimeInterface::diff -- DateTimeImmutable::diff -- DateTime::diff -- date_diff — 返回两个 DateTime 对象之间的差异
面向对象风格
$targetObject
, bool $absolute
= false
): DateInterval$targetObject
, bool $absolute
= false
): DateInterval过程式风格
$baseObject
, DateTimeInterface $targetObject
, bool $absolute
= false
): DateInterval返回两个 DateTimeInterface 对象之间的差异。
datetime
要比较的日期。
absolute
间隔是否应强制为正数?
The DateInterval 对象表示两个日期之间的差异。
返回值更具体地表示应用于原始对象 ($this
或 $originObject
) 的时钟时间间隔,以到达 $targetObject
。此过程并不总是可逆的。
该方法知道 DST 变更,因此可以返回一个间隔为 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 days');
?>
过程式风格
<?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() 在 DST 变更期间
<?php
$originalTime = new DateTimeImmutable("2021-10-30 09:00:00 Europe/London");
$targedTime = new DateTimeImmutable("2021-10-31 08:30:00 Europe/London");
$interval = $originalTime->diff($targedTime);
echo $interval->format("%H:%I:%S (Full days: %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");
$targedTime = new DateTimeImmutable("2023-12-31 UTC");
$interval = $originalTime->diff($targedTime);
echo "Full days: ", $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)