Classe DateInterval
La classe DateInterval permet de travailler avec des intervalles de temps en PHP.
Elle est utilisée pour stocker la différence entre deux dates ou pour définir un intervalle
dans les méthodes de manipulation des dates. L'intervalle est créé dans un format spécial.
Syntaxe
DateInterval::__construct(string $duration)
Format de l'intervalle
Le format est constitué de la lettre P (period)
et des éléments :
P{y}Y{m}M{d}DT{h}H{m}M{s}S{w}W
Dans ce format : Y - années, M - mois,
D - jours, T - séparateur du temps,
H - heures, M - minutes, S - secondes,
W - semaines.
Avant ces lettres, il faut écrire la valeur correspondante.
Par exemple, 3Y signifiera
trois ans, et 5Y2M désignera
5 ans et 2 mois.
Après sa création, l'objet DateInterval
contiendra les propriétés suivantes :
<?php
$interval->y // années
$interval->m // mois
$interval->d // jours
$interval->h // heures
$interval->i // minutes
$interval->s // secondes
$interval->f // microsecondes
$interval->invert // 1 si l'intervalle est négatif
$interval->days // nombre de jours (si créé via diff())
?>
Regardons le fonctionnement de l'intervalle sur des exemples :
Exemple
Créons un intervalle de 1 heure, 45 minutes et 30 secondes :
<?php
$interval = new DateInterval('PT1H45M30S');
var_dump($interval);
?>
Résultat de l'exécution du code :
DateInterval Object
(
'y' => 0
'm' => 0
'd' => 0
'h' => 1
'i' => 45
's' => 30
)
Exemple
Créons un intervalle de 3 semaines et 2 jours :
<?php
$interval = new DateInterval('P3W2D');
var_dump($interval);
?>
Résultat de l'exécution du code :
DateInterval Object
(
'y' => 0
'm' => 0
'd' => 23
'h' => 0
'i' => 0
's' => 0
)
Exemple
Créons un intervalle de 5 mois, 10 jours et 6 heures :
<?php
$interval = new DateInterval('P5M10DT6H');
var_dump($interval);
?>
Résultat de l'exécution du code :
DateInterval Object
(
'y' => 0
'm' => 5
'd' => 10
'h' => 6
'i' => 0
's' => 0
)
Exemple
Créons un intervalle de 2 années et 15 minutes :
<?php
$interval = new DateInterval('P2YT15M');
var_dump($interval);
?>
Résultat de l'exécution du code :
DateInterval Object
(
'y' => 2
'm' => 0
'd' => 0
'h' => 0
'i' => 15
's' => 0
)
Exemple
Créons un intervalle de 1 jour, 12 heures et 30 secondes :
<?php
$interval = new DateInterval('P1DT12H30S');
var_dump($interval);
?>
Résultat de l'exécution du code :
DateInterval Object
(
'y' => 0
'm' => 0
'd' => 1
'h' => 12
'i' => 0
's' => 30
)
Exemple
Créons un intervalle négatif de 1 an et 3 mois (intervalle en arrière) :
<?php
$interval = new DateInterval('P1Y3M');
$interval->invert = 1;
var_dump($interval);
?>
Résultat de l'exécution du code :
DateInterval Object
(
'y' => 1
'm' => 3
'd' => 0
'h' => 0
'i' => 0
's' => 0
'invert' => 1
)
Exemple
Créons un intervalle négatif de 2 heures, 30 minutes (intervalle en arrière) :
<?php
$interval = new DateInterval('PT2H30M');
$interval->invert = 1;
var_dump($interval);
?>
Résultat de l'exécution du code :
DateInterval Object
(
'y' => 0
'm' => 0
'd' => 0
'h' => 2
'i' => 30
's' => 0
'invert' => 1
)
Exemple
Ajoutons un intervalle à la date actuelle :
<?php
$date = new DateTime('2023-01-01');
$interval = new DateInterval('P10D');
$date->add($interval);
echo $date->format('Y-m-d');
?>
Résultat de l'exécution du code :
'2023-01-11'
Exemple
Calculons la différence entre deux dates :
<?php
$date1 = new DateTime('2023-01-01');
$date2 = new DateTime('2023-02-15');
$interval = $date1->diff($date2);
echo $interval->format('%m months %d days');
?>
Résultat de l'exécution du code :
'1 months 14 days'
Voir aussi
-
classe
DateTime,
qui représente une date et une heure -
classe
DateTimeZone,
qui représente un fuseau horaire