Introduction : Pourquoi la manipulation des dates en JavaScript est un défi pour le développeur
\nLa manipulation des dates et de l'heure est l'une des tâches les plus courantes et pourtant les plus délicates en développement web. Quoi de plus simple que d'obtenir la date actuelle ou de calculer la différence entre deux événements ? En pratique, les développeurs JavaScript (Node.js) rencontrent de nombreux pièges : fuseaux horaires, format ISO, comportement contre-intuitif de la méthode getMonth() et bibliothèques obsolètes. Dans cet article, nous analyserons la manipulation des dates, des principes de base aux techniques avancées, en utilisant uniquement l'objet standard Date et la bibliothèque moderne date-fns.
1. Bases de l'objet Date dans Node.js
\nL'objet natif Date est le fondement de la gestion du temps. Il stocke le nombre de millisecondes écoulées depuis le 1er janvier 1970 (époque Unix). Examinons les opérations de base.
Création et obtention de l'heure actuelle
\nLa façon la plus simple de créer un objet date est d'appeler new Date() sans arguments. Cela renvoie la date et l'heure actuelles sur le serveur.
// Date et heure actuelles (dans le fuseau horaire du serveur)\nconst now = new Date();\nconsole.log(now); // Exemple : 2024-05-20T14:30:00.000Z\n\n// Création à partir d'une chaîne ISO\nconst specificDate = new Date('2024-12-25T10:00:00');\nconsole.log(specificDate); // 2024-12-25T10:00:00.000Z\n\n// Création à partir de composants (année, mois, jour, heures, minutes, secondes)\nconst birthday = new Date(1990, 5, 15); // Attention : le mois 5 = Juin !\nconsole.log(birthday); // 1990-06-15T00:00:00.000Z\nRemarque importante : Les mois en JavaScript sont indexés à partir de 0 (Janvier — 0, Décembre — 11). C'est une source fréquente de bugs.
\n\nMéthodes pour obtenir les composants de la date
\nPour extraire les parties individuelles de la date, on utilise des getters. Rappelez-vous qu'ils renvoient les valeurs dans le fuseau horaire local du serveur.
\nconst date = new Date('2024-03-15T12:30:45');\n\nconsole.log(date.getFullYear()); // 2024\nconsole.log(date.getMonth()); // 2 (Mars, car l'index commence à 0)\nconsole.log(date.getDate()); // 15\nconsole.log(date.getDay()); // 5 (Vendredi, 0 - Dimanche)\nconsole.log(date.getHours()); // 12\nconsole.log(date.getMinutes()); // 30\nconsole.log(date.getSeconds()); // 45\nPour travailler en UTC (temps universel coordonné), utilisez les méthodes avec le préfixe getUTC..., par exemple getUTCHours().
2. Formatage et affichage des dates
\nDans Node.js, il n'existe pas de formatage intégré pratique des dates dans un format de chaîne arbitraire (par exemple, "15 mars 2024"). Deux solutions s'offrent à vous : la construction manuelle de la chaîne ou l'utilisation de bibliothèques.
\n\nFormatage manuel (sans bibliothèques externes)
\nSi vous devez afficher une date dans un format simple, vous pouvez écrire une petite fonction.
\nfunction formatDate(date) {\n const day = String(date.getDate()).padStart(2, '0');\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const year = date.getFullYear();\n return `${day}.${month}.${year}`;\n}\n\nconst today = new Date();\nconsole.log(formatDate(today)); // Exemple : "20.05.2024"\n\nSolution moderne : la bibliothèque date-fns
\nLa bibliothèque date-fns est une alternative moderne, modulaire et légère à l'obsolète moment.js. Elle est parfaitement adaptée à Node.js.
// Installation : npm install date-fns\n\nconst { format, addDays, differenceInDays } = require('date-fns');\nconst { fr } = require('date-fns/locale'); // Localisation\n\nconst date = new Date();\n\n// Formatage avec localisation\nconsole.log(format(date, 'dd MMMM yyyy', { locale: fr }));\n// Exemple : "20 mai 2024"\n\n// Ajout de jours\nconst nextWeek = addDays(date, 7);\nconsole.log(format(nextWeek, 'yyyy-MM-dd')); // "2024-05-27"\n\n// Différence en jours\nconst start = new Date(2024, 0, 1);\nconst end = new Date(2024, 11, 31);\nco