Travailler avec les dates en TypeScript : aperçu des bibliothèques date-fns, Luxon et Day.js

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

Travailler avec les dates en TypeScript : aperçu des bibliothèques populaires



Travailler avec les dates et l'heure est l'une des tâches les plus fréquentes et pourtant les plus délicates en développement web. L'objet natif Date en JavaScript (et TypeScript) présente plusieurs inconvénients : mutabilité, API non intuitive, problèmes de fuseaux horaires et absence de méthodes de formatage pratiques. Heureusement, l'écosystème TypeScript propose plusieurs bibliothèques puissantes qui résolvent ces problèmes et offrent un excellent support des types.



Dans cet article, nous examinerons les trois bibliothèques les plus populaires : date-fns, Luxon et Day.js. Vous découvrirez leurs caractéristiques, avantages, inconvénients et verrez des exemples d'utilisation avec TypeScript.



1. date-fns — modulaire et fonctionnelle



date-fns est une bibliothèque construite sur les principes de la programmation fonctionnelle. Chaque fonction est un module séparé, ce qui permet d'importer uniquement ce dont vous avez besoin et réduit considérablement la taille du bundle. En TypeScript, la bibliothèque dispose de types intégrés.



Installation

npm install date-fns


Exemples d'utilisation avec TypeScript

import { format, addDays, differenceInDays, isAfter, parseISO } from 'date-fns';

// Formatage de la dateconst today = new Date();console.log(format(today, 'yyyy-MM-dd')); // '2025-03-20'

// Ajout de joursconst nextWeek = addDays(today, 7);console.log(format(nextWeek, 'dd.MM.yyyy')); // '27.03.2025'

// Différence entre datesconst startDate = parseISO('2025-01-01');const endDate = parseISO('2025-12-31');const daysBetween = differenceInDays(endDate, startDate);console.log(`Jours en 2025 : ${daysBetween}`); // 364

// Comparaison de datesconst isFuture = isAfter(parseISO('2025-06-01'), today);console.log(`Le 1er juin 2025 est dans le futur ? ${isFuture}`); // true


Avantages

  • Tree-shaking — vous importez uniquement les fonctions nécessaires, ce qui réduit la taille de l'application.
  • Immutabilité — les fonctions ne modifient pas les objets sources, mais en retournent de nouveaux.
  • Support TypeScript — typage complet prêt à l'emploi.
  • Localisation — support de nombreuses langues, dont le français.


Inconvénients

  • Fonctionne avec le Date natif, ce qui peut être gênant pour les opérations complexes avec les fuseaux horaires.
  • Pas de support intégré pour les objets immuables (comme dans Luxon).


2. Luxon — puissante et moderne



Luxon est une bibliothèque créée par l'un des auteurs de Moment.js, mais sans ses inconvénients. Elle utilise ses propres objets immuables DateTime, Duration et Interval, ce qui rend le travail avec les dates intuitif et sûr. Luxon offre un excellent support des fuseaux horaires et des locales.



Installation

npm install luxon

Pour TypeScript, l'installation des types peut être nécessaire :

npm install --save-dev @types/luxon


Exemples d'utilisation avec TypeScript

import { DateTime, Duration } from 'luxon';

// Création et formatageconst now = DateTime.now();console.log(now.toFormat('yyyy-MM-dd HH:mm:ss')); // '2025-03-20 14:30:00'

// Travail avec les fuseaux horairesconst moscowTime = DateTime.now().setZone('Europe/Moscow');console.log(`Heure de Moscou : ${moscowTime.toFormat('HH:mm')}`);

// Ajout d'un intervalleconst nextMonth = now.plus({ months: 1 });console.log(`Dans un mois : ${nextMonth.toFormat('dd.MM.yyyy')}`);

// Différence entre datesconst start = DateTime.fromISO('2025-01-01');const end = DateTime.fromISO('2025-12-31');const diff = end.diff(start, ['months', 'days']);console.log(`Différence : ${diff.months} mois et ${diff.days} jours`);

// Travail avec les duréesconst duration = Duration.from

Recommendations