- L’objet Date existant de JavaScript est critiqué pour son caractère incomplet et incohérent, et l’API Temporal est présentée comme son remplaçant
- Date fonctionne comme un objet mutable, en décalage avec le concept réel de date, et souffre de problèmes structurels comme des erreurs de parsing et des limites dans la gestion des fuseaux horaires
- Temporal fournit un nouveau modèle de gestion des dates et heures fondé sur l’immuabilité, avec des classes détaillées comme
PlainDate, ZonedDateTime, Duration
- Les méthodes de Temporal ne modifient pas l’objet existant mais renvoient un nouvel objet, permettant un chaînage d’opérations clair et sûr
- Temporal est actuellement au stade 3 de standardisation (Stage 3) et bénéficie d’une prise en charge expérimentale dans les navigateurs récents comme Chrome et Firefox
Problèmes de l’objet Date de JavaScript
- Le constructeur
Date provoque de la confusion avec des règles de parsing incohérentes et une indexation peu intuitive
- Exemple : le mois (
month) commence à 0, tandis que le jour (day) et l’année (year) commencent à 1
- Les chaînes
"99" et "100" sont interprétées respectivement comme 1999 et 0100, ce qui illustre le manque de cohérence
Date a été conçu autour du temps et stocke en interne un timestamp Unix (en millisecondes)
- La prise en charge des fuseaux horaires est limitée, et l’objet ne comprend ni l’heure d’été (DST) ni les calendriers non grégoriens
- En raison de ces limites, il est courant de dépendre de grandes bibliothèques tierces comme Moment.js ou date-fns, ce qui entraîne une baisse des performances
Conflit entre immuabilité et notion de référence
- En JavaScript, les valeurs primitives sont immuables et stockées par valeur, tandis que les objets sont stockés par référence et peuvent être modifiés
Date est un objet créé via un constructeur, il est donc mutable
- Exemple : quand on appelle
setMonth() ou setDate(), l’objet d’origine est directement modifié
- Cela entraîne des changements de valeur inattendus entre des variables qui référencent le même objet
- Exemple : si une fonction reçoit
today en argument et modifie la date en interne, l’objet today d’origine est lui aussi modifié
Temporal : une nouvelle API de date et d’heure
Temporal n’est pas un constructeur mais un objet d’espace de noms, de structure similaire à Math
- Principaux composants :
PlainDate, PlainDateTime, PlainTime, ZonedDateTime, Duration, Now, etc.
Temporal.Now renvoie le moment présent sous différentes formes
plainDateISO() → date au format ISO
zonedDateTimeISO() → date et heure avec fuseau horaire
- Les objets Temporal fournissent un ensemble de méthodes explicites
add({ days: 1 }), subtract({ years: 2 }), etc. permettent d’effectuer des opérations explicites par unité
- Au lieu de modifier l’objet existant, ils renvoient un nouvel objet, préservant ainsi l’immuabilité
Fonctionnement et avantages de Temporal
- Les objets Temporal restent des objets, mais suivent un schéma d’utilisation intentionnellement immuable
- Exemple :
today.add({ days: 1 }) renvoie un nouvel objet date, tandis que today reste inchangé
- Temporal offre une syntaxe plus concise et plus claire que
Date
- Il répond aux besoins modernes comme la définition des fuseaux horaires, le calcul de durées et le maintien du format ISO
- Grâce au chaînage de méthodes comme
add, subtract, since et until, il devient possible d’exprimer simplement des calculs de date complexes
État de la standardisation et perspectives
Temporal a atteint le stade 3 (Stage 3) de la proposition ECMAScript, un niveau où l’implémentation par les navigateurs est recommandée
- Une prise en charge expérimentale a déjà commencé dans Chrome et Firefox, et d’autres navigateurs devraient suivre
- Les développeurs peuvent dès maintenant participer à l’amélioration de la spécification en testant l’API et en faisant des retours
Date continuera d’exister, mais à l’avenir, Temporal devrait devenir la méthode par défaut pour gérer les dates
- L’article se conclut en disant qu’« il aurait fallu le remplacer en 1995, mais même maintenant, Temporal.Now arrive au moment idéal »
Aucun commentaire pour le moment.