snippetjavascriptTippending
JavaScript Temporal API for date/time handling
Viewed 0 times
TemporaldatetimetimezonePlainDateZonedDateTime
Problem
The Date object is notoriously broken: mutable, no timezone support, months are 0-indexed, parsing is unreliable.
Solution
Use the Temporal API (Stage 3 proposal, polyfill available):
import { Temporal } from '@js-temporal/polyfill';
// Current date/time
const now = Temporal.Now.zonedDateTimeISO();
const today = Temporal.Now.plainDateISO();
// Create specific dates
const date = Temporal.PlainDate.from('2026-03-01');
const time = Temporal.PlainTime.from('14:30:00');
const dt = Temporal.PlainDateTime.from('2026-03-01T14:30:00');
// With timezone
const zdt = Temporal.ZonedDateTime.from({
year: 2026, month: 3, day: 1,
hour: 14, minute: 30,
timeZone: 'America/New_York',
});
// Arithmetic (immutable!)
const tomorrow = today.add({ days: 1 });
const nextWeek = today.add({ weeks: 1 });
const lastMonth = today.subtract({ months: 1 });
// Comparison
const cmp = Temporal.PlainDate.compare(date1, date2); // -1, 0, 1
date1.equals(date2); // boolean
// Duration
const duration = date1.until(date2); // Temporal.Duration
duration.total('days'); // number of days
// Formatting
dt.toLocaleString('en-US', { dateStyle: 'full' });
// Until Temporal ships natively, use:
// npm install @js-temporal/polyfill
// Or use date-fns / luxon as alternatives
import { Temporal } from '@js-temporal/polyfill';
// Current date/time
const now = Temporal.Now.zonedDateTimeISO();
const today = Temporal.Now.plainDateISO();
// Create specific dates
const date = Temporal.PlainDate.from('2026-03-01');
const time = Temporal.PlainTime.from('14:30:00');
const dt = Temporal.PlainDateTime.from('2026-03-01T14:30:00');
// With timezone
const zdt = Temporal.ZonedDateTime.from({
year: 2026, month: 3, day: 1,
hour: 14, minute: 30,
timeZone: 'America/New_York',
});
// Arithmetic (immutable!)
const tomorrow = today.add({ days: 1 });
const nextWeek = today.add({ weeks: 1 });
const lastMonth = today.subtract({ months: 1 });
// Comparison
const cmp = Temporal.PlainDate.compare(date1, date2); // -1, 0, 1
date1.equals(date2); // boolean
// Duration
const duration = date1.until(date2); // Temporal.Duration
duration.total('days'); // number of days
// Formatting
dt.toLocaleString('en-US', { dateStyle: 'full' });
// Until Temporal ships natively, use:
// npm install @js-temporal/polyfill
// Or use date-fns / luxon as alternatives
Why
Temporal fixes every Date pitfall: immutability, timezone awareness, 1-indexed months, reliable parsing, and proper duration arithmetic.
Revisions (0)
No revisions yet.