Date et heure en PHP en 2025 : ne répétez pas ces 5 erreurs

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

Le temps ne s'arrête pas : pourquoi les dates en PHP sont compliquées (et comment y remédier)

\n\n

Imaginez : vous développez un blog, une boutique en ligne ou un espace client. Et soudain, vous réalisez que vous devez montrer à l'utilisateur quand un article a été publié, une commande passée ou un message envoyé. Cela semble simple, non ? Il suffit d'utiliser la fonction date() — et le tour est joué.

\n\n

Mais le diable se cache dans les détails. En 2025, les développeurs PHP commettent encore les mêmes erreurs : ils confondent les fuseaux horaires, oublient l'immutabilité des objets, utilisent des fonctions obsolètes. Ensuite, ils s'étonnent que l'heure sur le site « saute » et que les tests échouent.

\n\n

Dans cet article, nous allons passer en revue les meilleures pratiques pour travailler avec les dates et heures en PHP — des solutions simples aux techniques professionnelles. Vous apprendrez à obtenir la date actuelle, à gérer les fuseaux horaires et à éviter les pièges courants avec les timestamps.

\n\n

1. La méthode la plus simple : la fonction date()

\n\n

Commençons par les classiques. La fonction date() est ce que 90 % des débutants utilisent en premier. Elle prend deux paramètres : le format de sortie et (facultativement) un timestamp. Si aucun timestamp n'est spécifié, l'heure actuelle du serveur est utilisée.

\n\n
echo date('Y-m-d H:i:s');\n// Affichage : 2025-04-08 14:35:12
\n\n

Voici les formats les plus courants :

\n
    \n
  • Y — année (4 chiffres)
  • \n
  • m — mois (01–12)
  • \n
  • d — jour du mois (01–31)
  • \n
  • H — heures au format 24 heures
  • \n
  • i — minutes
  • \n
  • s — secondes
  • \n
\n\n

Problème : date() dépend du paramètre date.timezone dans php.ini. Si vous n'avez pas défini de fuseau horaire, PHP utilisera l'heure système du serveur. Et le serveur peut se trouver dans un fuseau horaire différent — vos utilisateurs verront alors une heure incorrecte.

\n\n

2. L'approche professionnelle : la classe DateTime

\n\n

Depuis PHP 5.2, nous avons la classe DateTime. C'est une approche orientée objet pour travailler avec les dates, bien plus flexible et sécurisée que les fonctions date() et time().

\n\n
$now = new DateTime();\necho $now->format('Y-m-d H:i:s');\n// Affichage : 2025-04-08 14:35:12
\n\n

Avantages de DateTime :

\n
    \n
  • Possibilité de définir facilement le fuseau horaire via le constructeur
  • \n
  • Prise en charge de la modification de la date (ajouter des jours, des mois)
  • Capacité à comparer des dates entre elles
  • Fonctionne avec les intervalles
\n\n

Exemple avec un fuseau horaire :

\n\n
$now = new DateTime('now', new DateTimeZone('Europe/Moscow'));\necho $now->format('Y-m-d H:i:s');\n// Affichage : 2025-04-08 17:35:12 (MSK, UTC+3)
\n\n

2.1. DateTimeImmutable — votre nouveau meilleur ami

\n\n

En PHP 5.5, DateTimeImmutable est apparu. Sa principale différence avec DateTime standard : il ne se modifie pas lui-même. Au lieu de cela, chaque méthode (par exemple, modify() ou add()) retourne un nouvel objet.

\n\n
$date = new DateTimeImmutable();\n$modified = $date->modify('+1 day');\n\necho $date->format('Y-m-d');      // 2025-04-08 (inchangé !)\necho $modified->format('Y-m-d');  // 2025-04-09 (nouvel objet)
\n\n

Pourquoi est-ce important ? Parce que DateTime standard est un objet-référence. Si vous le passez à une fonction et qu'il y est modifié, l'original est également modifié. Avec Immutable, ce problème n'existe pas. En 2025, cela est considéré comme la norme de facto pour les projets sérieux.

\n\n

3. Comment obtenir un timestamp : time() vs DateTime

\n\n

Parfois, vous n'avez pas besoin d'une date, mais d'un timestamp Unix — le nombre de secondes écoulées depuis le 1er janvier 1970. PHP propose deux méthodes :

\n\n
// Ancienne méthode\necho time();  // 1744112112\n\n// Nouvelle méthode\necho (new DateTime())->getTimestamp();  // 1744112112
\n\n

Pour les tâches simples, time() est tout à fait

Blogs

Book Recommendations