Clasa DateInterval

Clasa DateInterval permite lucrul cu intervale de timp în PHP. Este utilizată pentru a stoca diferența dintre două date sau pentru a specifica un interval în metodele de lucru cu date. Intervalul este creat într-un format special.

Sintaxă

phpDateInterval::__construct(string $duration)

Formatul intervalului

Formatul constă din litera P (period) și elemente:

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

În acest format: Y - ani, M - luni, D - zile, T - separator de timp, H - ore, M - minute, S - secunde, W - săptămâni.

Înaintea acestor litere trebuie să scrieți valoarea corespunzătoare. De exemplu, 3Y va însemna trei ani, iar 5Y2M va desemna 5 ani și 2 luni.

După creare, obiectul DateInterval va conține următoarele proprietăți:

php<?php
  $interval->y  // ani
  $interval->m  // luni
  $interval->d  // zile
  $interval->h  // ore
  $interval->i  // minute
  $interval->s  // secunde
  $interval->f  // microsecunde
  $interval->invert // 1 dacă intervalul este negativ
  $interval->days // numărul de zile (dacă este creat prin diff())
?>

Să vedem funcționarea intervalului cu exemple:

Exemplu

Să creăm un interval de 1 oră, 45 minute și 30 secunde:

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

Rezultatul executării codului:

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

Exemplu

Să creăm un interval de 3 săptămâni și 2 zile:

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

Rezultatul executării codului:

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

Exemplu

Să creăm un interval de 5 luni, 10 zile și 6 ore:

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

Rezultatul executării codului:

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

Exemplu

Să creăm un interval de 2 ani și 15 minute:

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

Rezultatul executării codului:

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

Exemplu

Să creăm un interval de 1 zi, 12 ore și 30 secunde:

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

Rezultatul executării codului:

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

Exemplu

Să creăm un interval negativ de 1 an și 3 luni (interval înapoi):

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

Rezultatul executării codului:

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

Exemplu

Să creăm un interval negativ de 2 ore, 30 minute (interval înapoi):

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

Rezultatul executării codului:

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

Exemplu

Să adăugăm un interval la data curentă:

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

Rezultatul executării codului:

php'2023-01-11'

Exemplu

Să calculăm diferența dintre două date:

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

Rezultatul executării codului:

php'1 luni 14 zile'

Vezi și