Клас 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,
    які ўяўляе часовую зону