⏳ 9 years. That's how long it took JavaScript to admit that new Date() was broken.
Temporal just reached Stage 4. It's officially in ECMAScript 2026.
Already shipping in Firefox and Chrome. TypeScript 6.0 includes the types. V8 14.4 turned it on by default, which means the next Node.js major gets it native with no flag.
🔥 Why this matters
JavaScript Date has been a joke since 1995. Month indexes start at 0. Mutation everywhere. No time zone support. DST math that silently lies to you. Every team has written a Date wrapper at 2am. Every project pulls in a 70KB date library.
That era is ending.
🧠 What Temporal gives you
• Immutable date/time objects. No more accidental mutations.
• Built-in time zones. Real zones, not offsets. DST-aware arithmetic that works.
• Clear separation of concerns: PlainDate, PlainTime, PlainDateTime, ZonedDateTime, Instant, Duration. Each type means one thing.
• Non-Gregorian calendars supported natively.
• No more "is this UTC or local?" guessing game.
Before:
const meeting = moment.tz("2026-05-03 10:00", "Europe/Paris");
const inNY = meeting.clone().tz("America/New_York");
After:
const meeting = Temporal.ZonedDateTime.from({
year: 2026, month: 5, day: 3,
hour: 10, timeZone: "Europe/Paris"
});
const inNY = meeting.withTimeZone("America/New_York");
No clone. No mutation. No surprises.
✅ What you can delete from package.json
• moment (deprecated for years, still installed everywhere)
• date-fns (for most cases)
• luxon
• dayjs
• that custom Date helper nobody wants to own
Keep them if you ship to browsers older than 2025 or Node older than 26. Everywhere else, start migrating.
What library are you killing first - moment, date-fns, or that hand-rolled Date util in your repo? 👇
#javascript #typescript #nodejs #ecmascript #temporal #webdev #frontend #backend #tc39 #fullstack
Thanks for sharing this