JavaScript Temporal ZonedDateTime
Temporal.ZonedDateTime Object Reference
Revised March 2026
A Temporal.ZonedDateTime is a timezone and calendar-aware date/time object that represents a real time event from the perspective of a particular region on Earth.
It is optimized for cases that require a time zone, DST-safe arithmetic and interoperability with an RFC 5545 calendar.
Example
Example: December 7th, 1995 at 3:24:30 AM in US Pacific time (in Gregorian calendar).
const zonedDate = Temporal.ZonedDateTime.from({
timeZone: 'America/Los_Angeles',
year: 1995,
month: 12,
day: 7,
hour: 3,
minute: 24,
second: 30,
millisecond: 0,
microsecond: 3,
nanosecond: 500
});
Try it Yourself »
Temporal.ZonedDateTime Methods
| Method | Description |
|---|---|
| from() | Returns a new ZonedDateTime object from an object or a string |
| getTimeZone Transition() | Returns a ZonedDateTime object representing the closest instant after or before this instant |
| startOfDay() | Returns a ZonedDateTime object representing the first instant of this date |
| toInstant() | Returns a new Instant object representing this date-time |
| toPlainDate() | Returns a new PlainDate object representing this date-time |
| toPlainDateTime() | Returns a new PlainDateTime object representing this date-time |
| toPlainTime() | Returns a new PlainTime object representing this date-time |
| with() | Returns a new ZonedDateTime with specified fields modified |
| withCalendar() | Returns a new ZonedDateTime with a different calendar system |
| withPlainTime() | Returns a new ZonedDateTime the time part replaced by a new time |
| withTimeZone() | Returns a new ZonedDateTime object representing this date-time in the new time zone |
| Arithmetic | |
| add() | Returns a new ZonedDateTime with a duration added |
| subtract() | Returns a new ZonedDateTime with a duration subtracted |
| round() | Returns a new ZonedDateTime rounded to a given unit |
| Comparison | |
| compare() | Returns -1, 0, or 1 from comparing two dates |
| equals() | Returns true if two ZonedDateTime objects are identical |
| since() | Returns the difference from another date |
| until() | Returns the difference until another date |
| Formatting | |
| toString() | Returns an ISO 8601 string representation |
| toJSON() | Returns an ISO 8601 string for JSON serialization |
| toLocaleString() | Returns a language-sensitive representation of the date |
| valueOf() | Throws a TypeError (prevents temporals from being converted to primitives) |
Temporal.ZonedDateTime Properties
| Property | Description |
| calendarID | Calendar system identifier ("iso8601") |
| day | The day as an integer (1-31) |
| dayOfWeek | The day of the week as an integer (1 = Monday) |
| dayOfYear | The ordinal day of the year |
| daysInMonth | The total number of days in that month |
| daysInWeek | The total number of days in that week |
| daysInYear | The total number of days in that year |
| epochMilliseconds | Number of milliseconds since Unix epoch |
| epochNanoseconds | Number of nanoseconds since Unix epoch |
| era | The era name of the calendar, if applicable ("gregory") |
| eraYear | The year within the era, if applicable |
| hour | The hour as an integer (0-23) |
| hoursInDay | Hours in this day in this time zone(0-25) |
| inLeapYear | A boolean indicating if the date falls in a leap year |
| microsecond | The microsecond as an integer (0-999) |
| millisecond | The millisecond as an integer (0-999) |
| minute | The minute as an integer (0-59) |
| month | The month as an integer (1-12) |
| monthCode | A calendar-specific string code for the month ("M01") |
| monthsInYear | The total number of months in that year |
| nanosecond | The nanosecond as an integer (0-999) |
| offset | Offset used to interpret this instant (+HH:mm:ss.sssssssss) |
| offsetNanoseconds | Offset used to interpret this instant in nanoseconds |
| second | The second as an integer (0-59) |
| timeZoneId | Time zone identifier used to interpret this instant |
| weekOfYear | The week number within the year |
| year | The year as an integer |
| yearOfWeek | The year that the week belongs to |
Learn More:
Browser Support
Temporal is a major update to the JavaScript standard (TC39).
It is currently fully supported in Chrome, Edge, and Firefox, and is expected to reach full availability across browsers throughout 2026.
| Chrome 144 |
Edge 144 |
Firefox 139 |
Safari |
Opera |
| Jan 2026 | Jan 2026 | May 2025 | 🚫 | 🚫 |
Opera Support
Opera support will probably appear 1-3 browser cycles after Chromium, which often means a few months later.
Safari Support
As of March 2026, Safari has not yet announced a confirmed release date for stable support of the JavaScript Temporal API.
However, the implementation is actively in development and can be tested today in Safari Technology Preview by enabling the --use-temporal runtime flag.
Polyfill
Until Opera and Safari supports Temporal natively, use the official polyfill.
This Polyfill allows Temporal code to run in all browsers today:
Example
<script
src="https://cdn.jsdelivr.net/npm/@js-temporal/polyfill/dist/index.umd.js">
</script>
<script>
// Now you can use Temporal
const today = Temporal.Now.plainDateISO();
</script>