Les dates et les heures (notamment la gestion des fuseaux et de différents formats) ont toujours été une des faiblesses des langages. Chrome introduit avec la version 144 la nouvelle API : Temporal API, déjà disponible sur Firefox. Elle doit proposer un objet standard et des fonctions pour manipuler et afficher les dates et les heures.
Il est "amusant" de voir que l'implémentation des notions de Date et de Time a souvent été un problème. Une des noeuds du problème vient de la mauvaise implémentaire en JavaScript de 1995, et de sa mise à jour de 1997.
Plusieurs problèmes ont rapidement été remontés :
- Prise en charge limitée aux fuseaux horaires locaux et UTC
- Comportement de l'analyseur tellement instable qu'il est inutilisable
- Objet Date modifiable
- Gestion de l'heure d'été imprévisible
- API de calcul complexes
- Prise en charge limitée des calendriers non grégoriens
A noter de Temporal API n'est pas supporté par Safari.
La documentation se veut rassurante : "L'objet Temporal permet la gestion des dates et des heures dans divers contextes, notamment grâce à la représentation intégrée des fuseaux horaires et des calendriers, aux conversions d'heure, aux opérations arithmétiques, à la mise en forme, etc. Il est conçu pour remplacer intégralement l'objet Date."
Temporal n'est pas un constructeur et toutes les propriétés et méthodes sont statiques. En tout plus de 200 méthodes sont disponibles. Temporal est un namespace global. Cette API se veut plus souple avec une gestion plus sûre des dates et des heures en proposant une gestion des heures, des fusions horaires, des différents calendriers tout en fixant les problèmes de gestions Date / Time de JavaScript. Elle propose aussi des valeurs immutables et une gestin des fusions plus claires et la capacité à gérer plusiurs calendriers ce qui est indispensable en localisation. On peut espérer que cette API évite de faire du bricolage et proposer un code maintenable dans la durée...
Comme l'écrivait Tom Smykowski il y a quelques semaines, cela fait 25 ans que l'on attend sur JavaScript une API fiable... Par exemple, il est possible d'utiliser une date sans inclure une heure ou un fusion, idem pour l'heure, obtenir à l'instant T l'heure et la date, définir une Date, une haute et un horaire dans un seul ensemble de valeurs. Le tout en évitant une confusion. La précision se fait à la nanoseconde.
Pour standardiser la manipulation, Temporal API repose sur une représentation standard et normalisé des dates, fusions et heures : ISO 8601, RFC 3339 et 9557 :