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-fnsExemples 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}`); // trueAvantages
- 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
Datenatif, 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 luxonPour TypeScript, l'installation des types peut être nécessaire :
npm install --save-dev @types/luxonExemples 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 Aussi dans la bibliothèque
Frameworks CLI pour PHP : Symfony Console et Laravel Zero — guide complet
Surveillance des applications TypeScript : bibliothèques, outils et configuration
Travailler avec les archives ZIP en PHP : guide complet sur ZipArchive
Axios pour JavaScript (Node.js) : guide complet avec exemples
Travailler avec Excel en Kotlin : bibliothèques Apache POI et wrappers Kotlin