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, который представляет разницу между двумя датами.

Возвращаемое значение более конкретно представляет временной интервал, который при применении к исходному объекту ($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");
$targedTime = new DateTimeImmutable("2023-12-31 UTC");
$interval = $originalTime->diff($targedTime);
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");
$targedTime = new DateTimeImmutable("2021-10-31 08:30:00 Europe/London");
$interval = $originalTime->diff($targedTime);
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
add a note

User Contributed Notes 1 note

up
0
musahcoding at gmail dot com
20 hours ago
DateTimeImmutable and DateTime objects can be compared using comparison operators, however `==` and `===` produce different results:

<?php
var_dump
(new DateTimeImmutable('2012-10-10') === new DateTimeImmutable('2012-10-10'));

// false
?>

BUT:

<?php
var_dump
(new DateTimeImmutable('2012-10-10') == new DateTimeImmutable('2012-10-10'));

// true
?>
To Top