Класс DateInterval

Класс DateInterval позволяет работать с временными интервалами в PHP. Он используется для хранения разницы между двумя датами или для задания интервала в методах работы с датами. Интервал создается в специальном формате.

Синтаксис

phpDateInterval::__construct(string $duration)

Формат интервала

Формат состоит из буквы P (period) и элементов:

phpP{y}Y{m}M{d}DT{h}H{m}M{s}S{w}W

В этом формате: Y - годы, M - месяцы, D - дни, T - разделитель времени, H - часы, M - минуты, S - секунды, W - недели.

Перед этими буквами нужно писать соответствующее значение. Например, 3Y будет означать три года, а 5Y2M будет обозначать 5 лет и 2 месяца.

После создания объект DateInterval будет содержать следующие свойства:

php<?php
  $interval->y  // годы
  $interval->m  // месяцы
  $interval->d  // дни
  $interval->h  // часы
  $interval->i  // минуты
  $interval->s  // секунды
  $interval->f  // микросекунды
  $interval->invert // 1 если интервал отрицательный
  $interval->days // количество дней (если создано через diff())
?>

Давайте посмотрим работу интервала на примерах:

Пример

Создадим интервал в 1 час, 45 минут и 30 секунд:

php<?php
  $interval = new DateInterval('PT1H45M30S');
  var_dump($interval);
?>

Результат выполнения кода:

phpDateInterval Object
(
  'y' => 0
  'm' => 0
  'd' => 0
  'h' => 1
  'i' => 45
  's' => 30
)

Пример

Создадим интервал в 3 недели и 2 дня:

php<?php
  $interval = new DateInterval('P3W2D');
  var_dump($interval);
?>

Результат выполнения кода:

phpDateInterval Object
(
  'y' => 0
  'm' => 0
  'd' => 23
  'h' => 0
  'i' => 0
  's' => 0
)

Пример

Создадим интервал в 5 месяцев, 10 дней и 6 часов:

php<?php
  $interval = new DateInterval('P5M10DT6H');
  var_dump($interval);
?>

Результат выполнения кода:

phpDateInterval Object
(
  'y' => 0
  'm' => 5
  'd' => 10
  'h' => 6
  'i' => 0
  's' => 0
)

Пример

Создадим интервал в 2 года и 15 минут:

php<?php
  $interval = new DateInterval('P2YT15M');
  var_dump($interval);
?>

Результат выполнения кода:

phpDateInterval Object
(
  'y' => 2
  'm' => 0
  'd' => 0
  'h' => 0
  'i' => 15
  's' => 0
)

Пример

Создадим интервал в 1 день, 12 часов и 30 секунд:

php<?php
  $interval = new DateInterval('P1DT12H30S');
  var_dump($interval);
?>

Результат выполнения кода:

phpDateInterval Object
(
  'y' => 0
  'm' => 0
  'd' => 1
  'h' => 12
  'i' => 0
  's' => 30
)

Пример

Создадим отрицательный интервал в 1 год и 3 месяца (интервал назад):

php<?php
  $interval = new DateInterval('P1Y3M');
  $interval->invert = 1;
  var_dump($interval);
?>

Результат выполнения кода:

phpDateInterval Object
(
  'y' => 1
  'm' => 3
  'd' => 0
  'h' => 0
  'i' => 0
  's' => 0
  'invert' => 1
)

Пример

Создадим отрицательный интервал в 2 часа, 30 минут (интервал назад):

php<?php
  $interval = new DateInterval('PT2H30M');
  $interval->invert = 1;
  var_dump($interval);
?>

Результат выполнения кода:

phpDateInterval Object
(
  'y' => 0
  'm' => 0
  'd' => 0
  'h' => 2
  'i' => 30
  's' => 0
  'invert' => 1
)

Пример

Добавим интервал к текущей дате:

php<?php
  $date = new DateTime('2023-01-01');
  $interval = new DateInterval('P10D');
  $date->add($interval);
  echo $date->format('Y-m-d');
?>

Результат выполнения кода:

php'2023-01-11'

Пример

Вычислим разницу между двумя датами:

php<?php
  $date1 = new DateTime('2023-01-01');
  $date2 = new DateTime('2023-02-15');
  $interval = $date1->diff($date2);
  echo $interval->format('%m months %d days');
?>

Результат выполнения кода:

php'1 months 14 days'

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

  • класс DateTime,
    который представляет дату и время
  • класс DateTimeZone,
    который представляет временную зону