PHP 8.4.1 Released!

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
public DateTimeImmutable::diff(DateTimeInterface $targetObject, bool $absolute = false): DateInterval
public DateTime::diff(DateTimeInterface $targetObject, bool $absolute = false): DateInterval

Процедурный стиль

date_diff(DateTimeInterface $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)

Смотрите также

  • DateInterval::format() - Форматирует интервал
  • DateTime::add() - Изменяет объект DateTime, добавляя количество дней, месяцев, лет, часов, минут и секунд
  • DateTime::sub() - Вычитает дни, месяцы, годы, часы, минуты и секунды из объекта DateTime
Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top