
JavaScript's Date object is 30 years old, copied from Java, and never really fixed. Temporal is the native API that finally gets dates right: immutable, timezone-aware, and no more dividing by 86400000.
Martin Ferret
May 12, 2026
Quick: what does 86400000 mean?
If you answered "milliseconds in a day" without hesitating, you've been hurt before. We all have. For 30 years, date math in JavaScript meant subtracting two Date objects, getting milliseconds back, and dividing by that magic number. Then praying the timezones don't break everything.
The Temporal API ships natively in Chrome 144 and Firefox 139. After nearly a decade of TC39 work, it's here, and it fixes basically everything.
DateThe original Date object shipped in 1995, copied from Java. It barely changed since. The greatest hits of pain:
0. December is 11. Why? Java did it. Moving on.Date into a function, that function can silently wreck it.This is exactly why Moment.js, date-fns, Luxon, and Day.js all exist. Temporal makes them optional for most use cases.
The core idea: instead of one overloaded Date type that tries to do everything, Temporal gives you distinct types for distinct concepts, PlainDate for a calendar date with no timezone, ZonedDateTime for the full thing, Duration for elapsed time, and so on. Everything is immutable, every operation returns a new instance, no silent mutations.
The before/after is pretty striking:
// Before
const diff = Math.floor((endDate - startDate) / 86400000);
// → 438 (days only, nothing else)
// After
const diff = startDate.until(endDate, { largestUnit: 'year' });
// → { years: 1, months: 2, days: 19 }
That's the vibe across the whole API. Date arithmetic handles end-of-month overflow correctly. Timezone conversions use the IANA database natively, no library needed. Parsing is strict ISO 8601, same result everywhere.
| Environment | Status |
|---|---|
| Chrome 144+ | ✓ Native |
| Firefox 139+ | ✓ Native |
| Safari | In progress |
| Edge | In progress |
| Node.js | Not yet native |
If you're starting a new project targeting modern browsers: yes, reach for Temporal. For existing codebases with stable date logic, there's no rush, your date-fns setup isn't going anywhere.
But the next time you find yourself typing / 86400000, you'll know there's a better way.
Get the latest news and updates on developer certifications. Content is updated regularly, so please make sure to bookmark this page or sign up to get the latest content directly in your inbox.

Error Handling in Next.js with catchError
Learn why react-error-boundary falls short in the Next.js App Router and how catchError from Next.js 16.2 fixes both framework error propagation and server data refetching with a single function call.
Aurora Scharff
Jun 18, 2026

SEO in Nuxt with @nuxtjs/seo
Set up sitemaps, meta tags, structured data, OG images, and robots.txt in Nuxt with the official SEO module.
Reza Baar
Jun 17, 2026
![What’s the untracked function? [Angular Signals]](/.netlify/images?url=https:%2F%2Fapi.certificates.dev%2Fstorage%2FZzk75tZNAVT5d3GI9TxAD2JwkIFUKavFFj8sC2BL.png)
What’s the untracked function? [Angular Signals]
Learn how Angular's computed() function derives reactive values from signals and why it plays a key role in building high-performance, signal-based applications with cleaner and more predictable state management.
Alain Chautard
Jun 16, 2026