(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
Логическое значение, которое определяет, требуется ли принудительно переводить интервал в абсолютную величину.
Метод возвращает объект DateInterval, который представляет разницу между двумя датами.
Параметр absolute
влияет только
на свойство invert
объекта DateInterval.
Конкретнее — метод возвращает значение, которое представляет интервал времени,
который требуется применить к исходному объекту $this
или $originObject
,
чтобы получить целевой объект $targetObject
.
Процесс обратим не всегда.
Метод учитывает смену часовых поясов и поэтому иногда возвращает интервал
24 hours and 30 minutes
, как в одном из примеров.
Сначала объекты $this
или $baseObject
и $targetObject
преобразовывают к часовому поясу UTC,
когда требуется рассчитывать абсолютное время.
Пример #1 Пример использования метода DateTimeInterface::diff() с диапазоном дат
Значение, которое возвращает метод, — точное количество времени, которое требуется
для перехода от времени объекта $this
ко времени объекта $targetObject
.
Поэтому сравнение 1 января с 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";
?>
Результат выполнения приведённого примера:
Полных дней: 364
Пример #2 Пример использования метода 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 дней');
?>
Результат выполнения приведённых примеров:
+2 days
Пример #3 Пример использования метода 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 (Полных дней: 0)
Пример #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)