PHP - Différence entre deux dates

PHP

[07/06/2018] Différence entre deux dates

DateTime Diff

Différence entre deux dates

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 :
 
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 ;-)

© 2005 - 2019 • INFORMATUX