Travail avec les dates et l'heure en JavaScript : méthodes avancées et bibliothèques

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

Introduction : pourquoi le Date() standard ne suffit-il pas ?



L'objet intégré Date en JavaScript est un outil puissant, mais pas toujours pratique. Lors du développement d'applications complexes sur Node.js (par exemple, des planificateurs de tâches, des systèmes d'analyse ou des services financiers), les développeurs rencontrent plusieurs problèmes :



  • Mutabilité : les méthodes setMonth() modifient l'objet d'origine.
  • Prise en charge limitée des fuseaux horaires : Date ne fonctionne qu'avec l'heure locale et UTC.
  • Complexité du formatage : pas d'équivalent intégré de strftime.
  • Parsing de chaînes : new Date("2023-13-01") ne génère pas d'erreur, mais crée "2024-01-01".


Dans cet article, nous examinerons les approches avancées pour travailler avec les dates et l'heure dans Node.js, qui vous aideront à éviter ces problèmes et à écrire un code plus fiable.



1. Intl.DateTimeFormat : formatage sans dépendances externes



Le JavaScript moderne (ES6+) fournit une API d'internationalisation intégrée Intl.DateTimeFormat. C'est un outil puissant qui permet de formater les dates et l'heure pour n'importe quelle locale sans utiliser de bibliothèques tierces.



Utilisation de base



const date = new Date('2024-03-15T14:30:00Z');

// Formatage pour la locale russeconst formatterRU = new Intl.DateTimeFormat('ru-RU', { year: 'numeric', month: 'long', day: 'numeric', weekday: 'long', hour: '2-digit', minute: '2-digit'});

console.log(formatterRU.format(date));// "пятница, 15 марта 2024 г., 17:30"


Options avancées : fuseaux horaires et temps relatif



// Formatage avec prise en compte du fuseau horaireconst formatterTZ = new Intl.DateTimeFormat('en-US', {    timeZone: 'America/New_York',    dateStyle: 'full',    timeStyle: 'short'});console.log(formatterTZ.format(date));// "Friday, March 15, 2024 at 10:30 AM"

// Formatage relatif (Intl.RelativeTimeFormat)const rtf = new Intl.RelativeTimeFormat('ru', { numeric: 'auto' });console.log(rtf.format(-5, 'day')); // "5 дней назад"console.log(rtf.format(2, 'month')); // "через 2 месяца"


Cette approche est idéale lorsqu'il faut éviter des dépendances inutiles, mais qu'un formatage flexible pour l'interface utilisateur est nécessaire.



2. Bibliothèque date-fns : modularité et fonctionnalité



date-fns est une bibliothèque moderne construite sur les principes de la programmation fonctionnelle. Son principal avantage est la modularité : vous importez uniquement les fonctions nécessaires, ce qui réduit considérablement la taille du bundle.



Installation et exemples de base



// Installation : npm install date-fnsimport { format, addDays, subMonths, differenceInDays, isWeekend } from 'date-fns';import { ru } from 'date-fns/locale';

const today = new Date();

// Formatage avec localeconsole.log(format(today, 'dd MMMM yyyy, EEEE', { locale: ru }));// "15 марта 2024, пятница"

// Arithmétique des datesconst nextWeek = addDays(today, 7);const lastMonth = subMonths(today, 1);

// Différence entre datesconst diff = differenceInDays(nextWeek, today);console.log(diff); // 7

// Vérification du week-endconsole.log(isWeekend(today)); // true ou false


Scénarios complexes : comparaison et validation



import { parse, isValid, isBefore, isAfter, startOfMonth, endOfMonth } from 'date-fns';

// Parsing sécuriséconst parsed = parse('2024-13-01', 'yyyy-MM-dd', new Date());console.log(isValid(parsed)); // false — date invalide

// Travail avec des plagesconst start = startOfMonth(new Date(2024, 2, 1)); // 1er marsconst end = endOfMonth(new Date(2024, 2, 1)); // 31 mars

const targetDate = new Date(2024, 2, 15);if (isAfter(targetDate, start) && isBefore(targetDate, end)) { console.log('La date se situe en mars 2024');}


date-fns

Blogs

Book Recommendations