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
DateInterval::__construct(string $duration)
Format przedziału
Format składa się z litery P (period)
i elementów:
P{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
$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
$interval = new DateInterval('PT1H45M30S');
var_dump($interval);
?>
Wynik wykonania kodu:
DateInterval Object
(
'y' => 0
'm' => 0
'd' => 0
'h' => 1
'i' => 45
's' => 30
)
Przykład
Utwórzmy przedział 3 tygodni i 2 dni:
<?php
$interval = new DateInterval('P3W2D');
var_dump($interval);
?>
Wynik wykonania kodu:
DateInterval 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
$interval = new DateInterval('P5M10DT6H');
var_dump($interval);
?>
Wynik wykonania kodu:
DateInterval Object
(
'y' => 0
'm' => 5
'd' => 10
'h' => 6
'i' => 0
's' => 0
)
Przykład
Utwórzmy przedział 2 lat i 15 minut:
<?php
$interval = new DateInterval('P2YT15M');
var_dump($interval);
?>
Wynik wykonania kodu:
DateInterval 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
$interval = new DateInterval('P1DT12H30S');
var_dump($interval);
?>
Wynik wykonania kodu:
DateInterval 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
$interval = new DateInterval('P1Y3M');
$interval->invert = 1;
var_dump($interval);
?>
Wynik wykonania kodu:
DateInterval 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
$interval = new DateInterval('PT2H30M');
$interval->invert = 1;
var_dump($interval);
?>
Wynik wykonania kodu:
DateInterval Object
(
'y' => 0
'm' => 0
'd' => 0
'h' => 2
'i' => 30
's' => 0
'invert' => 1
)
Przykład
Dodajmy przedział do bieżącej daty:
<?php
$date = new DateTime('2023-01-01');
$interval = new DateInterval('P10D');
$date->add($interval);
echo $date->format('Y-m-d');
?>
Wynik wykonania kodu:
'2023-01-11'
Przykład
Obliczmy różnicę między dwiema datami:
<?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:
'1 months 14 days'
Zobacz też
-
klasa
DateTime,
która reprezentuje datę i czas -
klasa
DateTimeZone,
która reprezentuje strefę czasową