Différence entre les dates en PHP : 5 approches du simple au professionnel

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Comment calculer la différence entre deux dates en PHP : du débutant au pro

\n\n

Vous êtes-vous déjà demandé : « Combien de jours se sont écoulés depuis mes dernières vacances ? » ou « Dans combien d'heures se termine la promotion sur le site ? » ? Si vous êtes développeur PHP, ces questions se transforment en un seul problème : comment calculer la différence entre deux dates.

\n\n

Cette question est l'une des plus populaires sur Stack Overflow avec des milliers de vues. Et ce n'est pas sans raison : travailler avec les dates en PHP peut être délicat. Années bissextiles, fuseaux horaires, formats différents – tout cela peut casser même le code le plus réfléchi.

\n\n

Dans cet article, nous allons examiner 5 méthodes éprouvées pour calculer la différence entre les dates en PHP – des plus simples aux plus professionnelles. Vous apprendrez quand utiliser quelle méthode et obtiendrez des exemples de code prêts à l'emploi.

\n\n

1. Méthode classique : strtotime() et arithmétique simple

\n\n

La méthode la plus ancienne et intuitive consiste à convertir les dates en timestamps Unix avec la fonction strtotime() et à simplement soustraire un nombre de l'autre.

\n\n
<?php\n$date1 = strtotime('2024-01-15');\n$date2 = strtotime('2024-03-20');\n\n$diff_seconds = $date2 - $date1;\n$diff_days = floor($diff_seconds / (60 * 60 * 24));\n\necho "Différence en jours : " . $diff_days; // Affiche : 65\n?>
\n\n

Avantages : simplicité, fonctionne dans toutes les versions de PHP.

\n

Inconvénients : ne tient pas compte des fuseaux horaires, problèmes avec les dates antérieures à 1970, pas de support intégré pour les mois et les années (car leur durée varie).

\n\n

Cette méthode convient pour des calculs rapides « à la volée », mais pour des projets sérieux, il est préférable d'utiliser des outils plus modernes.

\n\n

2. Standard moderne : la classe DateTime et la méthode diff()

\n\n

Depuis PHP 5.2, nous disposons de la puissante classe DateTime. C'est un véritable couteau suisse pour travailler avec les dates. La méthode diff() retourne un objet DateInterval qui contient toutes les informations sur la différence.

\n\n
<?php\n$date1 = new DateTime('2024-01-15');\n$date2 = new DateTime('2024-03-20');\n\n$interval = $date1->diff($date2);\n\necho "Différence : " . $interval->days . " jours"; // 65\necho "ou " . $interval->m . " mois et " . $interval->d . " jours"; // 2 mois et 5 jours\n?>
\n\n

DateInterval donne accès aux propriétés suivantes :

\n
    \n
  • y — années
  • \n
  • m — mois
  • \n
  • d — jours
  • \n
  • h — heures
  • \n
  • i — minutes
  • \n
  • s — secondes
  • \n
  • days — nombre total de jours (le plus utile !)
  • \n
  • invert — indicateur : 0 si la première date est antérieure, 1 si elle est postérieure
  • \n
\n\n

Cette méthode prend en compte les années bissextiles et fonctionne correctement avec les différentes particularités calendaires. C'est celle recommandée dans la documentation officielle de PHP.

\n\n

3. Formatage de la différence : comment afficher « 2 ans 3 mois 10 jours »

\n\n

Souvent, il ne suffit pas d'obtenir un nombre, il faut formater joliment la différence pour l'utilisateur. La méthode format() de l'objet DateInterval vient à la rescousse.

\n\n
<?php\n$birthday = new DateTime('1990-05-15');\n$today = new DateTime();\n\n$age = $birthday->diff($today);\n\necho $age->format('%y ans %m mois %d jours');\n// Exemple : 34 ans 2 mois 3 jours\n?>
\n\n

Spécificateurs de format :

\n
    \n
  • %y — années
  • \n
  • %m — mois
  • \n
  • %d — jours
  • \n
  • %h — heures
  • \n
  • %i — minutes
  • \n
  • %s — secondes
  • \n
  • %a — nombre total de jours (alternative à days)
  • \n
  • %r — signe "moins" si la différence est négative
  • \n
\n\n

Vous voulez la déclinaison des mots « jour/jours » ? Il faudra écrire votre propre log

Blogs

Book Recommendations