Retour au blog

ES2026 Temporal API: La Fin de la Souffrance Avec les Dates en JavaScript

Salut HaWkers, apres des annees dattente et de developpement, la Temporal API fait enfin partie de ECMAScript 2026. Cette nouvelle API promet de resoudre les problemes historiques que chaque developpeur JavaScript a rencontres en travaillant avec dates et heures.

Explorons ce qui change, comment lutiliser, et pourquoi vous voudrez abandonner lobjet Date le plus vite possible.

Le Probleme Avec Date

Pourquoi Date Est Si Mauvais

Lobjet Date de JavaScript a ete copie de Java 1.0 en 1995 et a herite de tous ses problemes. Java lui-meme a deja deprecie la plupart des methodes originales.

Problemes classiques:

// Les mois commencent a 0 (Janvier = 0, pas 1)
const date = new Date(2026, 0, 15); // 15 Janvier, pas Fevrier

// Mutabilite inattendue
const original = new Date();
const copie = original;
copie.setMonth(5); // Oups, a change loriginal aussi!

// Parsing inconsistant entre navigateurs
new Date('2026-01-15'); // Peut etre interprete differemment

// Enfer des fuseaux horaires
const local = new Date();
const utc = new Date(local.toISOString());
// Quelle est la difference? Depend dou vous etes

// Operations mathematiques etranges
const d1 = new Date(2026, 0, 31);
d1.setMonth(1); // Devrait-ce etre 31 Fevrier?
// Devient en fait 3 Mars (overflow automatique)

Pourquoi les bibliotheques existent:

Moment.js, date-fns, Luxon et Day.js existent precisement parce que Date est inadequat pour travail serieux. Mais ajouter des dependances pour quelque chose de si fondamental a toujours ete sous-optimal.

La Temporal API

Concepts Fondamentaux

La Temporal API introduit plusieurs nouveaux types, chacun avec un but specifique.

Types principaux:

Type But Exemple
Temporal.Instant Moment exact dans le temps (UTC) Timestamp de log
Temporal.ZonedDateTime Date/heure avec fuseau horaire Heure de reunion
Temporal.PlainDateTime Date/heure sans fuseau horaire Heure locale generique
Temporal.PlainDate Date seulement Date de naissance
Temporal.PlainTime Heure seulement Alarme
Temporal.Duration Duree 2 heures et 30 minutes

Principe fondamental:

"Chaque type represente exactement ce dont vous avez besoin - rien de plus, rien de moins."

Immutabilite

Tous les objets Temporal sont immutables. Les operations retournent de nouveaux objets.

// Temporal - immutable et sur
const date = Temporal.PlainDate.from('2026-01-15');
const moisProchain = date.add({ months: 1 });

console.log(date.toString()); // 2026-01-15 (na pas change!)
console.log(moisProchain.toString()); // 2026-02-15

// Comparaison avec Date - mutable et dangereux
const ancienneDate = new Date('2026-01-15');
ancienneDate.setMonth(ancienneDate.getMonth() + 1);
// Loriginal a ete modifie!

Exemples Pratiques

Travailler Avec les Dates

Les operations communes deviennent beaucoup plus intuitives.

// Creer une date
const anniversaire = Temporal.PlainDate.from('2026-06-15');
// ou
const anniversaire2 = Temporal.PlainDate.from({
  year: 2026,
  month: 6,
  day: 15
});

// Ajouter/soustraire du temps
const dansUneSemaine = anniversaire.add({ weeks: 1 });
const ilyaTroisJours = anniversaire.subtract({ days: 3 });

// Comparer des dates (enfin ca a du sens!)
const aujourdhui = Temporal.Now.plainDateISO();

if (Temporal.PlainDate.compare(anniversaire, aujourdhui) > 0) {
  console.log("Lanniversaire nest pas encore arrive");
}

// Calculer la difference
const joursJusquAnniversaire = aujourdhui.until(anniversaire, {
  largestUnit: 'day'
});
console.log(`Il reste ${joursJusquAnniversaire.days} jours`);

Travailler Avec les Fuseaux Horaires

Les fuseaux horaires ne sont plus un cauchemar.

// Creer date/heure avec fuseau horaire
const reunion = Temporal.ZonedDateTime.from({
  year: 2026,
  month: 1,
  day: 27,
  hour: 15,
  minute: 0,
  timeZone: 'Europe/Paris'
});

console.log(reunion.toString());
// 2026-01-27T15:00:00+01:00[Europe/Paris]

// Convertir vers autre fuseau horaire
const reunionANewYork = reunion.withTimeZone('America/New_York');
console.log(reunionANewYork.toString());
// 2026-01-27T09:00:00-05:00[America/New_York]

// Obtenir heure actuelle dans fuseau horaire specifique
const maintenantATokyo = Temporal.Now.zonedDateTimeISO('Asia/Tokyo');
console.log(`A Tokyo il est ${maintenantATokyo.hour}:${maintenantATokyo.minute}`);

Travailler Avec les Durees

Les durees ont leur propre representation et operations intuitives.

// Creer duree
const tempsDeCourse = Temporal.Duration.from({
  hours: 1,
  minutes: 45,
  seconds: 30
});

// Operations avec duree
const deuxCourses = tempsDeCourse.add(tempsDeCourse);
console.log(deuxCourses.toString()); // PT3H31M

// Arrondir duree
const arrondi = tempsDeCourse.round({
  smallestUnit: 'minute',
  roundingMode: 'ceil'
});
console.log(arrondi.toString()); // PT1H46M

// Calculer duree entre deux moments
const debut = Temporal.PlainTime.from('09:00');
const fin = Temporal.PlainTime.from('17:30');
const journee = debut.until(fin);
console.log(`Journee: ${journee.hours}h ${journee.minutes}min`);

Formatage

Le formatage est integre avec Intl.

const date = Temporal.PlainDate.from('2026-01-27');

// Formatage avec Intl
const formatFR = new Intl.DateTimeFormat('fr-FR', {
  dateStyle: 'full'
});

console.log(formatFR.format(date));
// mardi 27 janvier 2026

// Formatage personnalise
const formatCustom = new Intl.DateTimeFormat('fr-FR', {
  weekday: 'short',
  day: 'numeric',
  month: 'short'
});

console.log(formatCustom.format(date));
// mar. 27 janv.

Support et Polyfills

Etat dImplementation

En Janvier 2026, le support sexpand.

Navigateurs:

Navigateur Statut
Chrome Disponible (flag jusqua v130, defaut v135+)
Firefox En implementation
Safari Preview disponible
Edge Suit Chrome

Runtimes:

Runtime Statut
Node.js Disponible v23+
Deno Disponible v2.0+
Bun Disponible v1.2+

Utiliser Polyfill

Pour environnements sans support natif.

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

// Utilisation
import { Temporal } from '@js-temporal/polyfill';

// Le code fonctionne identiquement au natif
const aujourdhui = Temporal.Now.plainDateISO();
console.log(aujourdhui.toString());

Conclusion

La Temporal API represente une des plus grandes ameliorations de JavaScript en annees. Apres des decennies a souffrir avec lobjet Date, nous avons enfin une API de dates et heures qui a du sens, est immutable, et supporte correctement les fuseaux horaires.

Points principaux:

  1. Temporal API fait partie de ES2026 et arrive dans les navigateurs
  2. Multiples types pour differents besoins (Instant, ZonedDateTime, PlainDate, etc.)
  3. Immutabilite par defaut evite bugs communs
  4. Fuseaux horaires fonctionnent correctement
  5. Polyfills disponibles pour utilisation immediate

Pour developpeurs JavaScript, la recommandation est: commencez a utiliser Temporal le plus tot possible, que ce soit via polyfill ou dans environnements avec support natif. Cest un de ces changements qui, une fois adoptes, vous ne voudrez jamais revenir en arriere.

Pour plus sur nouvelles fonctionnalites JavaScript, lisez: Pattern Matching en JavaScript: La Proposition TC39 Qui Va Changer Votre Code.

Allez, on y va! 🦅

Commentaires (0)

Cet article n'a pas encore de commentaires. Soyez le premier!

Ajouter des commentaires