6 points par GN⁺ 2026-01-13 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • 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
    • Exemple :
      const today = Temporal.Now.plainDateISO();  
      console.log(`Tomorrow will be ${ today.add({ days: 1 }) }. Today is ${ today }.`);  
      // 결과: Tomorrow will be 2026-01-01. Today is 2025-12-31.  
      
  • 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.

Aucun commentaire pour le moment.