JavaScript's Date object is one of the language's most notorious legacies: copied from Java in 1995, never meaningfully fixed, and the quiet source of frustration in every project that handles timestamps. Months are zero-indexed, time zones are ignored unless you drag them along explicitly, and dates are mutable — meaning a function can silently alter the one you passed in. After nine years of work, TC39 finally has an answer: the Temporal API reached Stage 4 in March 2026 and, with the ratification of ECMAScript 2026 on June 30, is now officially part of the language.
What Temporal does differently
Instead of one confusing object that blurs date, time, and time zone, Temporal introduces a set of sharply-scoped types: PlainDate for a pure date, PlainTime for a pure time, ZonedDateTime for a full time-zone-aware timestamp, and more. Every object is immutable — a calculation returns a new object, leaving the original untouched. Time zones and calendars are first-class: you can work explicitly in UTC, a named time zone, or the system time zone, with no detours through library code. Date arithmetic — how many business days until deadline X? — is finally readable and correct without needing to understand library internals.
Ready to use?
Chrome 144 and Firefox 139 support Temporal fully; Edge follows Chrome. Safari is slightly behind but has support in Technical Preview. For projects that need to cover all major browsers today, mature polyfills are available via @js-temporal/polyfill. Moment.js, date-fns and dayjs did an excellent job as a workaround, but for new projects Temporal is the better choice: less dependency, fewer surprises, more platform.
Our take
A running joke in JavaScript circles is that Date would never pass a modern code review. The fact that wound is now healed is no small matter — it is one of the oldest and most structural improvements to the language in years. If you are starting a new project or module that touches dates today, there is no good reason to reach for a date library. Learn Temporal, and let the workarounds rest.



