Klasė DateInterval

Klasė DateInterval leidžia dirbti su laiko intervalais PHP. Ji naudojama skirtumui tarp dviejų datų saugoti arba intervalui nustatyti datų darbo metoduose. Intervalas kuriamas specialiame formate.

Sintaksė

phpDateInterval::__construct(string $duration)

Intervalo formatas

Formatas susideda iš raidės P (period) ir elementų:

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

Šiame formate: Y - metai, M - mėnesiai, D - dienos, T - laiko skiriklis, H - valandos, M - minutės, S - sekundės, W - savaitės.

Prieš šias raides reikia rašyti atitinkamą reikšmę. Pavyzdžiui, 3Y reikš tris metus, o 5Y2M reikš 5 metus ir 2 mėnesius.

Sukūrus objektas DateInterval turės šias savybes:

php<?php
  $interval->y  // metai
  $interval->m  // mėnesiai
  $interval->d  // dienos
  $interval->h  // valandos
  $interval->i  // minutės
  $interval->s  // sekundės
  $interval->f  // mikrosekundės
  $interval->invert // 1 jei intervalas neigiamas
  $interval->days // dienų skaičius (jei sukurta per diff())
?>

Pažiūrėkime intervalo veikimą pavyzdžiuose:

Pavyzdys

Sukurkime intervalą 1 valandai, 45 minutėms ir 30 sekundžių:

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

Kodo vykdymo rezultatas:

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

Pavyzdys

Sukurkime intervalą 3 savaitėms ir 2 dienoms:

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

Kodo vykdymo rezultatas:

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

Pavyzdys

Sukurkime intervalą 5 mėnesiams, 10 dienų ir 6 valandoms:

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

Kodo vykdymo rezultatas:

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

Pavyzdys

Sukurkime intervalą 2 metams ir 15 minučių:

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

Kodo vykdymo rezultatas:

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

Pavyzdys

Sukurkime intervalą 1 dienai, 12 valandų ir 30 sekundžių:

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

Kodo vykdymo rezultatas:

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

Pavyzdys

Sukurkime neigiamą intervalą 1 metams ir 3 mėnesiams (intervalas atgal):

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

Kodo vykdymo rezultatas:

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

Pavyzdys

Sukurkime neigiamą intervalą 2 valandoms, 30 minučių (intervalas atgal):

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

Kodo vykdymo rezultatas:

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

Pavyzdys

Pridėkime intervalą prie dabartinės datos:

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

Kodo vykdymo rezultatas:

php'2023-01-11'

Pavyzdys

Apskaičiuokime skirtumą tarp dviejų datų:

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

Kodo vykdymo rezultatas:

php'1 months 14 days'

Taip pat žiūrėkite

  • klasė DateTime,
    kuri reprezentuoja datą ir laiką
  • klasė DateTimeZone,
    kuri reprezentuoja laiko zoną