Le temps ne s'arrête pas : pourquoi les dates en PHP sont compliquées (et comment y remédier)
\n\nImaginez : 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é.
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\nDans 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\n1. La méthode la plus simple : la fonction date()
\n\nCommenç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.
echo date('Y-m-d H:i:s');\n// Affichage : 2025-04-08 14:35:12\n\nVoici 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
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.
2. L'approche professionnelle : la classe DateTime
\n\nDepuis 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().
$now = new DateTime();\necho $now->format('Y-m-d H:i:s');\n// Affichage : 2025-04-08 14:35:12\n\nAvantages 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
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\n2.1. DateTimeImmutable — votre nouveau meilleur ami
\n\nEn 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.
$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\nPourquoi 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\n3. Comment obtenir un timestamp : time() vs DateTime
\n\nParfois, 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\nPour les tâches simples, time() est tout à fait