PHP - Différence entre deux dates
PHP
[07/06/2018] Différence entre deux dates
DateTime Diff
Dans les péripéties que peuvent rencontrer les développeurs parfois, il y a les dates en PHP et leurs manipulations. Je ne connais pas un développeur qui n'a pas un jour rencontré ce souci.
Petite astuce rapide pour ceux qui souhaitent calculer un delta entre deux dates, avec un résultat en jours, années.
Utilisons l'instruction DateTime et essayons le style procédural et le style objet :
Delta en nombre de jours avec signe (positif ou négatif) entre deux dates fixes :
Voici la liste des paramètres possibles (format) en sachant qu'il vous faudra utiliser d'autres méthodes pour calculer des différences en mois / heures / minutes :
Les caractères suivants sont reconnus dans la chaîne
Ce tableau est disponible ici.
Bon code ;-)
Petite astuce rapide pour ceux qui souhaitent calculer un delta entre deux dates, avec un résultat en jours, années.
Utilisons l'instruction DateTime et essayons le style procédural et le style objet :
Style objet
Delta en nombre de jours ou d'années entre deux dates au format ISO :
$datetime1 = new DateTime('2010-07-11 20:11:19'); // Date dans le passé
$datetime2 = new DateTime(date("Y-m-d H:i:s")); // Date du jour (2018-09-07 16:10:21)
$interval = $datetime1->diff($datetime2);
echo $interval->format('%a jours'); // 2979 jours
echo $interval->format('%y années'); // 8 années
Style procédural
Delta en nombre de jours avec signe (positif ou négatif) entre deux dates fixes :
$datetime1 = date_create('2018-07-11'); // Date fixe
$datetime2 = date_create('2018-08-17'); // Date fixe
$interval = date_diff($datetime1, $datetime2);
echo $interval->format('%R%a jours'); // +37 jours
Voici la liste des paramètres possibles (format) en sachant qu'il vous faudra utiliser d'autres méthodes pour calculer des différences en mois / heures / minutes :
Les caractères suivants sont reconnus dans la chaîne
format
. Chaque caractère utilisé pour le format doit être préfixé par un signe de pourcentage (%).Caractère de format |
Description | Valeur d'exemple |
---|---|---|
% | Caractère % littéral | % |
Y | Année, numérique, au moins 2 chiffres avec zéros initiaux | 01, 03 |
y | Année, numérique | 1, 3 |
M | Mois, numérique, au moins 2 chiffres avec zéros initiaux | 01, 03, 12 |
m | Mois, numérique | 1, 3, 12 |
D | Jour, numérique, au moins 2 chiffres avec zéros initiaux | 01, 03, 31 |
d | Jour, numérique | 1, 3, 31 |
a | Nombre total de jours, provenant de la méthode DateTime::diff() ou (unknown) sinon | 4, 18, 8123 |
H | Heure, numérique, au moins 2 chiffres avec zéros initiaux | 01, 03, 23 |
h | Heure, numérique | 1, 3, 23 |
I | Minute, numérique, au moins 2 chiffres avec zéros initiaux | 01, 03, 59 |
i | Minute, numérique | 1, 3, 59 |
S | Seconde, numérique, au moins 2 chiffres avec zéros initiaux | 01, 03, 57 |
s | Seconde, numérique | 1, 3, 57 |
F | Microsecondes, numérique, au moins 6 chiffres, avec zéros initiaux | 007701, 052738, 428291 |
f | Microsecondes, numérique | 7701, 52738, 428291 |
R | Signe "-" lorsque négatif, "+" si positif | -, + |
r | Signe "-" lorsque négatif, vide si positif | -, |
Ce tableau est disponible ici.
Bon code ;-)