Comparer deux dates avec PHP
Comparer deux dates : cette question se pose régulièrement pour un développeur , afin de déclencher (ou non) un évènement. La date que je vais extraire de ma base des données est-elle passée ? Ou à venir ?
Or comparer deux dates au format MySQL (AAAA-mm-jj) ne fonctionne pas toujours selon les mois calendaire (à 2, ou à 1 chiffre ?)…
La solution consiste à ramener les 2 dates en secondes par rapport à une date de référence (1er janvier 1970 par défaut); puis à les comparer. Exemple ici : […]
On utilisera la fonction mktime(), qui retourne le nombre de seconde depuis le 1er janvier 1970. Elle est à argumenter dans cet ordre et au format suivant :
- mois avec 2 chiffres de 00 à 12 (n),
- jour avec 2 chiffres de 00 à 31 (j),
- année avec 4 chiffres (Y)
…on peut également renseigner éventuellement les formats complémentaires suivants, si nécessaire (sinon laisser juste des zéro simples : cf. ex. ci-dessous):
- heures avec 2 chiffres de 0 à 24 (H),
- minutes avec 2 chiffres de 00 à 59 (i),
- secondes avec 2 chiffres de 00 à 59 (s)
Par exemple, pour comparer la date du 1er avril 2020 et la date d’aujourd’hui, on utilisera la méthode suivante :
1. on encode la date à tester (01/04/2020) :
$dateTest = mktime(0, 0, 0, 04, 01, 2019);
$dateLimit = mktime(0, 0, 0, date('n'), date('j'), date('Y'));
if ($dateTest > $dateLimit )
echo 'trop tard';
else
echo 'ok';
// les dates sont ici utilisées au format MySQL (YYYY-mm-jj)
function TestDate($date1, $date2) {
$tabloTest = explode('-', $date1);
$dateTest = mktime(0, 0, 0, $tabloTest1], $tabloTest[2], $tabloTest[0]);
$tablolimit = explode('-', $date2);
$dateLimit = mktime(0, 0, 0, $tablolimit[1], $tablolimit[2], $tablolimit[0]);
return ($dateTest > $dateLimit ) ? 'trop tard' : 'ok';
}
// utilisation de la fonction :
echo TestDate($date1, $date2);

No Responses to “Comparer deux dates avec PHP”