Klasa DateInterval

Klasa DateInterval omogućava rad sa vremenskim intervalima u PHP. Koristi se za čuvanje razlike između dva datuma ili za zadavanje intervala u metodama za rad sa datumima. Interval se kreira u specijalnom formatu.

Sintaksa

phpDateInterval::__construct(string $duration)

Format intervala

Format se sastoji od slova P (period) i elemenata:

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

U ovom formatu: Y - godine, M - meseci, D - dani, T - razdvajač vremena, H - sati, M - minuti, S - sekunde, W - nedelje.

Ispred ovih slova treba pisati odgovarajuću vrednost. Na primer, 3Y će značiti tri godine, a 5Y2M će označavati 5 godina i 2 meseca.

Nakon kreiranja objekat DateInterval će sadržati sledeće osobine:

php<?php
  $interval->y  // godine
  $interval->m  // meseci
  $interval->d  // dani
  $interval->h  // sati
  $interval->i  // minuti
  $interval->s  // sekunde
  $interval->f  // mikrosekunde
  $interval->invert // 1 ako je interval negativan
  $interval->days // broj dana (ako je kreirano preko diff())
?>

Hajde da pogledamo rad intervala na primerima:

Primer

Hajde da kreiramo interval od 1 sat, 45 minuta i 30 sekundi:

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

Rezultat izvršavanja koda:

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

Primer

Hajde da kreiramo interval od 3 nedelje i 2 dana:

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

Rezultat izvršavanja koda:

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

Primer

Hajde da kreiramo interval od 5 meseci, 10 dana i 6 sati:

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

Rezultat izvršavanja koda:

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

Primer

Hajde da kreiramo interval od 2 godine i 15 minuta:

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

Rezultat izvršavanja koda:

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

Primer

Hajde da kreiramo interval od 1 dan, 12 sati i 30 sekundi:

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

Rezultat izvršavanja koda:

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

Primer

Hajde da kreiramo negativni interval od 1 godinu i 3 meseca (interval unazad):

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

Rezultat izvršavanja koda:

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

Primer

Hajde da kreiramo negativni interval od 2 sata, 30 minuta (interval unazad):

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

Rezultat izvršavanja koda:

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

Primer

Dodajmo interval tekućem datumu:

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

Rezultat izvršavanja koda:

php'2023-01-11'

Primer

Izračunajmo razliku između dva datuma:

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');
?>

Rezultat izvršavanja koda:

php'1 months 14 days'

Vidi još

  • klasu DateTime,
    koja predstavlja datum i vreme
  • klasu DateTimeZone,
    koja predstavlja vremensku zonu