L'API Date Temporelle en Javascript est vraiment bonne, voici pourquoi :

En adoptant l'API temporelle, code plus propre, maintenable, gérant dates/fuseaux, pour une meilleure UX globale.

Louis Dupont

Louis Dupont

5 June 2025

L'API Date Temporelle en Javascript est vraiment bonne, voici pourquoi :

```html

💡
Avant de commencer, laissez-moi vous faire une petite remarque : téléchargez Apidog gratuitement dès aujourd'hui pour rationaliser votre processus de test d'API, en particulier pour explorer les fonctionnalités puissantes de Claude 3.7 Sonnet, parfait pour les développeurs qui cherchent à tester des modèles d'IA de pointe comme celui-ci !
button

Travailler avec les dates et les heures est depuis longtemps un point sensible pour les développeurs JavaScript. L'objet natif Date, avec ses bizarreries et ses limitations, a poussé de nombreux développeurs vers des bibliothèques tierces comme Moment.js ou date-fns. Cependant, le comité TC39 (responsable de l'évolution de JavaScript) travaille sur une solution : l'API Temporal. Cette approche moderne et complète de la gestion des dates et des heures promet de résoudre les problèmes de longue date liés aux opérations temporelles de JavaScript.

Le problème avec l'objet Date de JavaScript

Avant de plonger dans l'API Temporal, il est important de comprendre les limites de l'objet Date actuel :

  1. État mutable : les objets Date peuvent être modifiés sur place, ce qui entraîne des effets secondaires inattendus
  2. Fonctionnalité limitée : des opérations simples comme l'ajout de jours ou la comparaison de dates nécessitent un code complexe
  3. Incohérences d'analyse de chaînes : l'analyse des dates à partir de chaînes est notoirement peu fiable sur les navigateurs
  4. Pas de prise en charge des fuseaux horaires : mauvaise gestion des fuseaux horaires au-delà de l'UTC et de l'heure locale
  5. Calendrier grégorien uniquement : pas de prise en charge des autres systèmes de calendrier
  6. API confuse : méthodes comme getMonth() renvoyant des valeurs indexées à zéro (0-11 au lieu de 1-12)

Ces problèmes ont rendu le travail avec les dates en JavaScript sujet aux erreurs et frustrant, ce qui a conduit à l'adoption généralisée de bibliothèques tierces.

Présentation de l'API Temporal

L'API Temporal est une proposition d'ajout à JavaScript qui fournit une solution moderne et complète pour travailler avec les dates et les heures. Elle est conçue comme un objet global (Temporal) qui agit comme un espace de noms de premier niveau (similaire à l'objet Math), contenant diverses classes pour différentes opérations de date et d'heure.

Les principes clés de l'API Temporal incluent :

  1. Immuabilité : tous les objets Temporal sont immuables, ce qui élimine les effets secondaires
  2. Clarté : séparation claire entre les différents types de concepts de date/heure
  3. Prise en charge des fuseaux horaires : prise en charge de premier ordre de tous les fuseaux horaires, y compris l'arithmétique sécurisée par l'heure d'été
  4. Plusieurs systèmes de calendrier : prise en charge des calendriers non grégoriens
  5. Précision : précision nanoseconde pour les calculs de temps
  6. Cohérence : analyse et formatage standardisés

Types de données clés dans l'API Temporal

L'API Temporal introduit plusieurs classes spécialisées pour gérer différents aspects de la date et de l'heure :

Types de données simples (sans informations de fuseau horaire)

  1. Temporal.PlainDate : représente une date de calendrier (par exemple, le 24 août 2006) sans heure ni informations de fuseau horaire
  2. Temporal.PlainTime : représente l'heure de l'horloge murale (par exemple, 19 h 39) sans date ni fuseau horaire
  3. Temporal.PlainDateTime : combine la date et l'heure de l'horloge murale sans informations de fuseau horaire
  4. Temporal.PlainYearMonth : représente une année et un mois spécifiques (par exemple, octobre 2020)
  5. Temporal.PlainMonthDay : représente un mois et un jour sans année (par exemple, le 14 juillet)

Types de données zonées (avec informations de fuseau horaire)

  1. Temporal.ZonedDateTime : un objet date/heure tenant compte du fuseau horaire et du calendrier, représentant un événement réel à un moment précis du point de vue d'une région particulière
  2. Temporal.Instant : représente un point fixe dans le temps (heure exacte), sans tenir compte du calendrier ou de l'emplacement

Types supplémentaires

  1. Temporal.Duration : exprime une durée (par exemple, 5 minutes et 30 secondes)
  2. Temporal.TimeZone : représente un fuseau horaire et fournit des méthodes de conversion
  3. Temporal.Calendar : représente un système de calendrier

Travailler avec l'API Temporal

Création d'objets temporels

L'API Temporal offre plusieurs façons de créer des objets :

// Obtenir la date et l'heure actuelles
const now = Temporal.Now.plainDateTimeISO();
console.log(now.toString()); // par exemple, 2023-08-24T14:30:45.123456789

// Juste la date
const today = Temporal.Now.plainDateISO();
console.log(today.toString()); // par exemple, 2023-08-24

// Juste l'heure
const currentTime = Temporal.Now.plainTimeISO();
console.log(currentTime.toString()); // par exemple, 14:30:45.123456789

// Création d'objets à partir de composants
const date = Temporal.PlainDate.from({ year: 2023, month: 8, day: 24 });
const time = Temporal.PlainTime.from({ hour: 14, minute: 30, second: 45 });
const dateTime = Temporal.PlainDateTime.from({
  year: 2023,
  month: 8,
  day: 24,
  hour: 14,
  minute: 30,
  second: 45
});

// Création à partir de chaînes ISO
const dateFromString = Temporal.PlainDate.from("2023-08-24");
const timeFromString = Temporal.PlainTime.from("14:30:45");
const dateTimeFromString = Temporal.PlainDateTime.from("2023-08-24T14:30:45");

Travailler avec les fuseaux horaires

L'API Temporal facilite grandement le travail avec les fuseaux horaires :

// Heure actuelle dans le fuseau horaire local
const localTime = Temporal.Now.zonedDateTimeISO();
console.log(localTime.toString()); 
// par exemple, 2023-08-24T14:30:45+01:00[Europe/London]

// Heure actuelle dans un fuseau horaire spécifique
const tokyoTime = Temporal.Now.zonedDateTimeISO("Asia/Tokyo");
console.log(tokyoTime.toString()); 
// par exemple, 2023-08-24T22:30:45+09:00[Asia/Tokyo]

// Conversion entre les fuseaux horaires
const nyTime = localTime.withTimeZone("America/New_York");
console.log(nyTime.toString()); 
// par exemple, 2023-08-24T09:30:45-04:00[America/New_York]

Arithmétique des dates et des heures

L'une des fonctionnalités les plus puissantes de l'API Temporal est ses opérations arithmétiques intuitives :

// Ajout de temps
const tomorrow = today.add({ days: 1 });
const nextWeek = today.add({ days: 7 });
const twoHoursLater = currentTime.add({ hours: 2 });

// Soustraction de temps
const yesterday = today.subtract({ days: 1 });
const lastWeek = today.subtract({ days: 7 });
const twoHoursEarlier = currentTime.subtract({ hours: 2 });

// Travailler avec les durées
const duration = Temporal.Duration.from({ hours: 2, minutes: 30 });
const laterTime = currentTime.add(duration);

// Trouver la différence entre deux dates
const date1 = Temporal.PlainDate.from("2023-01-01");
const date2 = Temporal.PlainDate.from("2023-08-24");
const difference = date1.until(date2);
console.log(difference.toString()); // P236D (format de durée ISO 8601)
console.log(difference.days); // 236

Modification des composants avec "with"

L'API Temporal fournit un moyen simple de créer de nouveaux objets avec des composants modifiés :

// Modification de l'année d'une date
const nextYear = date.with({ year: date.year + 1 });

// Définition de composants spécifiques
const newDateTime = dateTime.with({ hour: 12, minute: 0, second: 0 });
console.log(newDateTime.toString()); // 2023-08-24T12:00:00

Comparaison d'objets temporels

L'API fournit des méthodes de comparaison intuitives :

const date1 = Temporal.PlainDate.from("2023-08-24");
const date2 = Temporal.PlainDate.from("2023-09-15");

console.log(date1.equals(date2)); // false
console.log(date1.equals(date1)); // true
console.log(date1.before(date2)); // true
console.log(date1.after(date2)); // false
console.log(date1.since(date2).days); // -22

Gestion de l'heure d'été et des heures ambiguës

L'API Temporal gère avec élégance les complexités des transitions de l'heure d'été :

// Création d'une heure qui tombe pendant une transition d'heure d'été
const dstTime = Temporal.ZonedDateTime.from({
  timeZone: "America/New_York",
  year: 2023,
  month: 11,
  day: 5,
  hour: 1,
  minute: 30
});

// L'API vous permet de spécifier comment gérer les heures ambiguës
const dstTimeExact = Temporal.ZonedDateTime.from({
  timeZone: "America/New_York",
  year: 2023,
  month: 11,
  day: 5,
  hour: 1,
  minute: 30,
  disambiguation: "earlier" // Options: 'earlier', 'later', 'compatible', 'reject'
});

Prise en charge des calendriers non grégoriens

Contrairement à l'objet Date, l'API Temporal prend en charge plusieurs systèmes de calendrier :

// Création d'une date dans le calendrier hébreu
const hebrewDate = Temporal.PlainDate.from({
  year: 5783,
  month: 5,
  day: 15,
  calendar: "hebrew"
});

// Conversion entre les systèmes de calendrier
const gregorianDate = hebrewDate.withCalendar("iso8601");

Analyse et formatage

L'API Temporal fournit des méthodes intégrées pour l'analyse et le formatage :

// Analyse à partir de chaînes
const date = Temporal.PlainDate.from("2023-08-24");

// Formatage personnalisé
const options = {
  year: 'numeric',
  month: 'long',
  day: 'numeric'
};
console.log(date.toLocaleString("en-US", options)); // August 24, 2023

État actuel et prise en charge du navigateur

Au moment de la rédaction de cet article, l'API Temporal est au stade 3 du processus de proposition TC39, ce qui signifie qu'elle est sur le point d'être finalisée, mais pas encore intégrée à la norme ECMAScript officielle. Bien que la prise en charge native du navigateur soit toujours en attente, les développeurs peuvent utiliser des polyfills comme @js-temporal/polyfill pour commencer à utiliser cette API dès aujourd'hui :

// Installation du polyfill
// npm install @js-temporal/polyfill

// Utilisation dans votre code
import { Temporal } from "@js-temporal/polyfill";

const now = Temporal.Now.plainDateTimeISO();

Conclusion

L'API Temporal représente une amélioration significative des capacités de gestion des dates et des heures de JavaScript. En résolvant les problèmes de longue date liés à l'objet Date et en fournissant une API complète et intuitive, elle promet de rendre le travail avec les concepts temporels en JavaScript beaucoup plus agréable et moins sujet aux erreurs.

Les principaux avantages de l'API Temporal incluent :

  1. Immuabilité : toutes les opérations renvoient de nouveaux objets, ce qui évite les effets secondaires
  2. Clarté : distinction claire entre les différents types de dates et d'heures
  3. Complet : couvre tout, des dates simples aux opérations complexes tenant compte des fuseaux horaires
  4. Intuitif : des méthodes comme add(), subtract() et with() rendent les opérations courantes simples
  5. Précis : prend en charge la précision nanoseconde
  6. Global : prise en charge de plusieurs fuseaux horaires et systèmes de calendrier

En attendant que les navigateurs implémentent cette API en natif, le polyfill permet aux développeurs de commencer à bénéficier de ces améliorations dès aujourd'hui. Alors que les applications Web continuent de devenir plus globales et sensibles au temps, l'API Temporal deviendra sans aucun doute un outil essentiel dans la boîte à outils de chaque développeur JavaScript, mettant enfin fin au besoin de bibliothèques externes pour les opérations de base sur les dates et les heures.

En adoptant l'API Temporal, les développeurs peuvent écrire un code plus propre et plus facile à maintenir qui gère correctement les complexités des dates, des heures et des fuseaux horaires, ce qui se traduit par de meilleures expériences utilisateur dans le monde entier.

button

```

Explore more

Fathom-R1-14B : Modèle de raisonnement IA avancé d'Inde

Fathom-R1-14B : Modèle de raisonnement IA avancé d'Inde

L'IA en expansion rapide. Fathom-R1-14B (14,8 milliards de paramètres) excelle en raisonnement mathématique et général, conçu par Fractal AI Research.

5 June 2025

Mistral Code : L'assistant de codage le plus personnalisable basé sur l'IA pour les entreprises

Mistral Code : L'assistant de codage le plus personnalisable basé sur l'IA pour les entreprises

Découvrez Mistral Code, l'IA d'aide au code la plus personnalisable pour les entreprises.

5 June 2025

Comment Claude Code transforme le codage de l'IA en 2025

Comment Claude Code transforme le codage de l'IA en 2025

Découvrez Claude Code en 2025 : codage IA révolutionné. Fonctionnalités, démo, et pourquoi il gagne du terrain après Windsurf d'Anthropic. Indispensable !

5 June 2025

Pratiquez le Design-first d'API dans Apidog

Découvrez une manière plus simple de créer et utiliser des API