Klasa DateInterval

Klasa DateInterval umożliwia pracę z przedziałami czasowymi w PHP. Jest używana do przechowywania różnicy między dwiema datami lub do określania przedziału w metodach pracy z datami. Przedział jest tworzony w specjalnym formacie.

Składnia

phpDateInterval::__construct(string $duration)

Format przedziału

Format składa się z litery P (period) i elementów:

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

W tym formacie: Y - lata, M - miesiące, D - dni, T - separator czasu, H - godziny, M - minuty, S - sekundy, W - tygodnie.

Przed tymi literami należy wpisać odpowiednią wartość. Na przykład, 3Y będzie oznaczać trzy lata, a 5Y2M będzie oznaczać 5 lat i 2 miesiące.

Po utworzeniu obiekt DateInterval będzie zawierał następujące właściwości:

php<?php
  $interval->y  // lata
  $interval->m  // miesiące
  $interval->d  // dni
  $interval->h  // godziny
  $interval->i  // minuty
  $interval->s  // sekundy
  $interval->f  // mikrosekundy
  $interval->invert // 1 jeśli przedział jest ujemny
  $interval->days // liczba dni (jeśli utworzono przez diff())
?>

Przyjrzyjmy się działaniu przedziału na przykładach:

Przykład

Utwórzmy przedział 1 godziny, 45 minut i 30 sekund:

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

Wynik wykonania kodu:

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

Przykład

Utwórzmy przedział 3 tygodni i 2 dni:

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

Wynik wykonania kodu:

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

Przykład

Utwórzmy przedział 5 miesięcy, 10 dni i 6 godzin:

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

Wynik wykonania kodu:

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

Przykład

Utwórzmy przedział 2 lat i 15 minut:

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

Wynik wykonania kodu:

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

Przykład

Utwórzmy przedział 1 dzień, 12 godzin i 30 sekund:

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

Wynik wykonania kodu:

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

Przykład

Utwórzmy ujemny przedział 1 roku i 3 miesięcy (przedział wstecz):

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

Wynik wykonania kodu:

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

Przykład

Utwórzmy ujemny przedział 2 godzin, 30 minut (przedział wstecz):

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

Wynik wykonania kodu:

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

Przykład

Dodajmy przedział do bieżącej daty:

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

Wynik wykonania kodu:

php'2023-01-11'

Przykład

Obliczmy różnicę między dwiema datami:

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

Wynik wykonania kodu:

php'1 months 14 days'

Zobacz też

  • klasa DateTime,
    która reprezentuje datę i czas
  • klasa DateTimeZone,
    która reprezentuje strefę czasową