Travailler avec les dates en JavaScript (Node.js) : aperçu des bibliothèques populaires
Travailler avec les dates et l'heure est l'une des tâches les plus courantes en développement web. L'objet natif Date en JavaScript (Node.js) offre des fonctionnalités de base, mais s'avère souvent peu pratique et limité : absence de formatage pratique, d'analyse, de manipulations avec les fuseaux horaires et de calcul de différences entre les dates. Heureusement, il existe plusieurs bibliothèques matures qui résolvent ces problèmes. Dans cet article, nous examinerons quatre outils les plus populaires pour travailler avec les dates dans Node.js.
1. Moment.js — un classique (mais avec des réserves)
Moment.js a longtemps été la norme de facto pour travailler avec les dates en JavaScript. Elle fournit une API riche pour l'analyse, la validation, le formatage et les manipulations de dates.
Installation :
npm install momentExemple d'utilisation :
const moment = require('moment');
// Date et heure actuellesconst now = moment();console.log(now.format('YYYY-MM-DD HH:mm:ss')); // 2025-03-21 14:30:00
// Analyse d'une chaîneconst date = moment('2025-12-25', 'YYYY-MM-DD');console.log(date.format('dddd, MMMM Do YYYY')); // Thursday, December 25th 2025
// Manipulationsconst future = moment().add(7, 'days').subtract(2, 'hours');console.log(future.fromNow()); // "in 6 days"
// Différence entre datesconst a = moment('2025-01-01');const b = moment('2025-03-21');console.log(b.diff(a, 'days')); // 79Avantages : immense communauté, documentation détaillée, nombreux plugins (gestion des fuseaux horaires, localisation).
Inconvénients : bibliothèque obsolète (mode maintenance), taille importante (~230 KB), méthodes mutables (modifient l'objet source). Les développeurs recommandent d'utiliser des alternatives modernes.
2. date-fns — approche modulaire et fonctionnelle
date-fns est une bibliothèque moderne construite sur les principes de la programmation fonctionnelle. Chaque fonction est un module séparé, ce qui permet d'importer uniquement les parties nécessaires et de réduire la taille du bundle.
Installation :
npm install date-fnsExemple d'utilisation :
const { format, addDays, subHours, differenceInDays, parseISO } = require('date-fns');
// Formatageconst now = new Date();console.log(format(now, 'yyyy-MM-dd HH:mm:ss')); // 2025-03-21 14:30:00
// Manipulations (immuables — crée un nouvel objet)const future = addDays(now, 7);const adjusted = subHours(future, 2);console.log(format(adjusted, 'dd.MM.yyyy')); // 28.03.2025
// Différenceconst start = parseISO('2025-01-01');const end = new Date();console.log(differenceInDays(end, start)); // 79
// Localisation (russe)const { ru } = require('date-fns/locale');console.log(format(now, 'PPPP', { locale: ru })); // "пятница, 21 марта 2025 г."Avantages : modularité, immuabilité (ne modifie pas les objets sources), support TypeScript, excellente documentation.
Inconvénients : nécessite Node.js 14+, pas de support intégré des fuseaux horaires (nécessite date-fns-tz).
3. Day.js — une alternative légère et rapide à Moment.js
Day.js est une bibliothèque minimaliste (seulement 2 KB) dont l'API est presque entièrement compatible avec Moment.js. Elle est idéale si vous devez remplacer Moment.js sans réécrire le code.
Installation :
npm install dayjsExemple d'utilisation :
const dayjs = require('dayjs');const utc = require('dayjs/plugin/utc');const relativeTime = require('dayjs/plugin/relativeTime');
dayjs.extend(utc);dayjs.extend(relativeTime);
// Utilisation de base (comme dans Moment)const now = dayjs();console.log(now