Клас 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,
    който представлява часова зона