(PHP 5 >= 5.3.0, PHP 7, PHP 8)
DateTimeInterface::diff -- DateTimeImmutable::diff -- DateTime::diff -- date_diff — Returns the difference between two DateTime objects
面向对象风格
$targetObject
, bool $absolute
= false
): DateInterval
$targetObject
, bool $absolute
= false
): DateInterval
过程化风格
$baseObject
, DateTimeInterface $targetObject
, bool $absolute
= false
): DateInterval
Returns the difference between two DateTimeInterface objects.
datetime
The date to compare to.
absolute
Should the interval be forced to be positive?
The DateInterval object represents the difference between the two dates.
The return value more specifically represents the clock-time interval to
apply to the original object ($this
or
$originObject
) to arrive at the
$targetObject
. This process is not always
reversible.
The method is aware of DST changeovers, and hence can return an interval of
24 hours and 30 minutes
, as per one of the examples. If
you want to calculate with absolute time, you need to convert both the
$this
/$baseObject
, and
$targetObject
to UTC first.
示例 #1 DateTimeImmutable::diff() example
面向对象风格
<?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() during DST changeover
<?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 DateTime object comparison
注意:
DateTimeImmutable and DateTime objects can be compared using comparison operators.
<?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)