Classe DateInterval
La classe DateInterval permette di lavorare con intervalli temporali in PHP.
Viene utilizzata per memorizzare la differenza tra due date o per specificare un intervallo
nei metodi di lavoro con le date. L'intervallo viene creato in un formato speciale.
Sintassi
DateInterval::__construct(string $duration)
Formato dell'intervallo
Il formato consiste nella lettera P (period)
e negli elementi:
P{y}Y{m}M{d}DT{h}H{m}M{s}S{w}W
In questo formato: Y - anni, M - mesi,
D - giorni, T - separatore del tempo,
H - ore, M - minuti, S - secondi,
W - settimane.
Prima di queste lettere è necessario scrivere il valore
corrispondente. Ad esempio, 3Y significherà
tre anni, mentre 5Y2M indicherà
5 anni e 2 mesi.
Dopo la creazione, l'oggetto DateInterval
conterrà le seguenti proprietà:
<?php
$interval->y // anni
$interval->m // mesi
$interval->d // giorni
$interval->h // ore
$interval->i // minuti
$interval->s // secondi
$interval->f // microsecondi
$interval->invert // 1 se l'intervallo è negativo
$interval->days // numero di giorni (se creato tramite diff())
?>
Vediamo il funzionamento dell'intervallo con degli esempi:
Esempio
Creiamo un intervallo di 1 ora, 45 minuti e 30 secondi:
<?php
$interval = new DateInterval('PT1H45M30S');
var_dump($interval);
?>
Risultato dell'esecuzione del codice:
DateInterval Object
(
'y' => 0
'm' => 0
'd' => 0
'h' => 1
'i' => 45
's' => 30
)
Esempio
Creiamo un intervallo di 3 settimane e 2 giorni:
<?php
$interval = new DateInterval('P3W2D');
var_dump($interval);
?>
Risultato dell'esecuzione del codice:
DateInterval Object
(
'y' => 0
'm' => 0
'd' => 23
'h' => 0
'i' => 0
's' => 0
)
Esempio
Creiamo un intervallo di 5 mesi, 10 giorni e 6 ore:
<?php
$interval = new DateInterval('P5M10DT6H');
var_dump($interval);
?>
Risultato dell'esecuzione del codice:
DateInterval Object
(
'y' => 0
'm' => 5
'd' => 10
'h' => 6
'i' => 0
's' => 0
)
Esempio
Creiamo un intervallo di 2 anni e 15 minuti:
<?php
$interval = new DateInterval('P2YT15M');
var_dump($interval);
?>
Risultato dell'esecuzione del codice:
DateInterval Object
(
'y' => 2
'm' => 0
'd' => 0
'h' => 0
'i' => 15
's' => 0
)
Esempio
Creiamo un intervallo di 1 giorno, 12 ore e 30 secondi:
<?php
$interval = new DateInterval('P1DT12H30S');
var_dump($interval);
?>
Risultato dell'esecuzione del codice:
DateInterval Object
(
'y' => 0
'm' => 0
'd' => 1
'h' => 12
'i' => 0
's' => 30
)
Esempio
Creiamo un intervallo negativo di 1 anno e 3 mesi (intervallo all'indietro):
<?php
$interval = new DateInterval('P1Y3M');
$interval->invert = 1;
var_dump($interval);
?>
Risultato dell'esecuzione del codice:
DateInterval Object
(
'y' => 1
'm' => 3
'd' => 0
'h' => 0
'i' => 0
's' => 0
'invert' => 1
)
Esempio
Creiamo un intervallo negativo di 2 ore, 30 minuti (intervallo all'indietro):
<?php
$interval = new DateInterval('PT2H30M');
$interval->invert = 1;
var_dump($interval);
?>
Risultato dell'esecuzione del codice:
DateInterval Object
(
'y' => 0
'm' => 0
'd' => 0
'h' => 2
'i' => 30
's' => 0
'invert' => 1
)
Esempio
Aggiungiamo un intervallo alla data corrente:
<?php
$date = new DateTime('2023-01-01');
$interval = new DateInterval('P10D');
$date->add($interval);
echo $date->format('Y-m-d');
?>
Risultato dell'esecuzione del codice:
'2023-01-11'
Esempio
Calcoliamo la differenza tra due date:
<?php
$date1 = new DateTime('2023-01-01');
$date2 = new DateTime('2023-02-15');
$interval = $date1->diff($date2);
echo $interval->format('%m mesi %d giorni');
?>
Risultato dell'esecuzione del codice:
'1 mesi 14 giorni'
Vedi anche
-
classe
DateTime,
che rappresenta data e ora -
classe
DateTimeZone,
che rappresenta il fuso orario