Travailler avec les dates et l'heure en JavaScript (Node.js) : des bases aux techniques avancées
Travailler avec les dates et l'heure est l'une des tâches les plus courantes dans le développement backend. Qu'il s'agisse de journalisation d'événements, de calcul d'échéances, de génération de rapports ou d'interaction avec des API, savoir gérer correctement les horodatages est une compétence cruciale. Dans cet article, nous allons aborder tous les aspects clés du travail avec les dates dans l'environnement Node.js : de l'objet natif Date aux bibliothèques populaires qui simplifient la vie du développeur.
1. L'objet natif Date : bases et pièges à éviter
En JavaScript, l'objet natif Date est responsable de la gestion des dates. Il fournit des méthodes de base pour créer, lire et manipuler les dates. Cependant, il présente un certain nombre de particularités qu'il est important de connaître.
Création d'un objet Date
La façon la plus simple d'obtenir la date et l'heure actuelles :
const now = new Date();console.log(now); // 2025-03-20T14:30:00.000Z (exemple)On peut créer une date à partir d'une chaîne de caractères, d'un timestamp (millisecondes depuis le 1er janvier 1970) ou en spécifiant les composants manuellement :
// À partir d'une chaîne (ISO 8601)const dateFromString = new Date("2025-12-25T10:00:00Z");
// À partir d'un timestampconst dateFromTimestamp = new Date(1735048800000);
// À partir de composants (année, mois (0-11), jour, heure, minute, seconde, milliseconde)const dateFromParts = new Date(2025, 11, 25, 10, 0, 0, 0); // 25 décembre 2025 10:00:00console.log(dateFromParts); // 2025-12-25T07:00:00.000Z (dépend du fuseau horaire)Important : Les mois en JavaScript sont indexés à partir de 0 (janvier = 0, décembre = 11). C'est une source fréquente d'erreurs.
Obtention des composants d'une date
L'objet Date fournit des méthodes pour obtenir les composants individuels :
const date = new Date();console.log(date.getFullYear()); // 2025console.log(date.getMonth()); // 2 (mars, car l'indexation commence à 0)console.log(date.getDate()); // 20console.log(date.getDay()); // 4 (jeudi, 0 = dimanche)console.log(date.getHours()); // 17console.log(date.getMinutes()); // 45console.log(date.getSeconds()); // 12console.log(date.getMilliseconds());// 345console.log(date.getTime()); // 1742474712345 (timestamp)Notez que toutes ces méthodes retournent des valeurs dans le fuseau horaire local du serveur. Pour travailler avec UTC, utilisez les méthodes avec le préfixe getUTC... (par exemple, getUTCFullYear()).
Manipulation des dates
La modification d'une date se fait via les méthodes set. Elles modifient l'objet d'origine :
const date = new Date();date.setFullYear(2026);date.setMonth(0); // janvierdate.setDate(15);console.log(date); // 2026-01-15T... (les autres composants sont conservés)Piège à éviter : Les méthodes set ajustent automatiquement la date. Par exemple, si vous définissez le 32 janvier, la date deviendra le 1er février. Cela peut être à la fois pratique et inattendu.
2. Formatage des dates et affichage dans le format souhaité
La méthode native toLocaleDateString() permet d'afficher une date dans le format propre à une locale spécifique :
const date = new Date(2025, 11, 25);console.log(date.toLocaleDateString('ru-RU')); // 25.12.2025console.log(date.toLocaleDateString('en-US')); // 12/25/2025console.log(date.toLocaleDateString('de-DE')); // 25.12.2025Pour un formatage plus flexible, on peut utiliser Intl.DateTimeFormat :
const formatter = new Intl.DateTimeFormat('fr-FR', { year: 'numeric', month: 'long', day: 'numeric', weekday: 'long', hour: '2-digit', minute: '2-digit'});console.log(formatter.format(new Date())); // "jeudi 20 mars 2025, 17:45"Cependant, pour des formats complexes (par exemple, "2025-03-20T14:30:00+03:00") ou des modèles personnalisés, il est préférable d'utiliser des bibliothèques (nous y reviendrons).