JavaScript Temporal Instant
The Temporal.Instant Object
The Temporal.Instant object represents an exact moment in UTC time.
It has NO time zone and NO calendar.
It stores nanoseconds since January 1, 1970 00:00:00 (Unix epoch).
Example: 2026-05-17T14:30:00Z
Example
May 17, 2026 at 14:30 at the zero meridian Greenwich, London:
const instant = Temporal.Instant.from("2026-05-17T14:30:00Z");
Try it Yourself »
The Z at the end of the date stands for Zero time.
What is Instant Time?
- It is a precise point in time
- It is an exact moment on the global timeline
- It is not affected by time zones
- It is not affected DST (Daylight Saving Time)
- It is measured in UTC
Z at the End of the Date?
The Z at the end is a part of the ISO 8601 standard for formatting date and time.
It indicates that the time is 0 (Zero) offset from UTC time.
It is also known as Z time, Zero time or Zulu time.
What is UTC Time?
UTC stands for Universal Time Coordinated.
- It is the exact time on the zero meridian (Greenwich, London)
- It is the same moment everywhere on earth
- It is not affected by any time zones
- It is not affected DST (Daylight Saving Time)
Prior to 1972, UTC was called Greenwich Mean Time (GMT).
Is now referred to as Coordinated Universal Time or Universal Time Coordinated (UTC).
To obtain local time in world, you need to add or subtract hours from UTC depending on how many time zones you are away from Greenwich.
Example
London: 12:00 (UTC)
Oslo: 14:00 (UTC+2)
New York: 08:00 (UTC-4)
Tokyo: 21:00 (UTC+9)
How to Create a Temporal.Instant
An Instant can be created in several different ways:
| From | Code |
|---|---|
| With Constructor | new Temporal.Instant() |
| From String | Temporal.Instant.from() |
| From Epoch millisec | Temporal.Instant.fromEpochMilliseconds() |
| From Epoch nanosec | Temporal.Instant.fromEpochNanoseconds() |
| From Current Time | Temporal.Now.instant() |
Create an Instant from new
You can create an Instant using the new Temporal.Instant() constructor.
The n at the end means BigInt.
The parameter must be a BigInt.
Create an Instant from a String
You can create an Instant from an RFC 9557 string.
The Z at the end means UTC time.
Create an Instant from Epoch Milliseconds
You can create an Instant from a Unix timestamp (milliseconds since 1970-01-01).
This is similar to how JavaScript Date works internally.
Create an Instant from Epoch Nanoseconds
You can create an Instant from a Unix timestamp (nanoseconds since 1970-01-01).
Example
const instant = Temporal.Instant.fromEpochNanoseconds(1779028200000000000n);
Try it Yourself »
Create an Instant from Current Time
JavaScript Temporal.Instant does not have any method for creating an instant from current time.
You must use a Temporal.Now method instead.
The Temporal.Now.instant() method returns an Temporal.Instant object with the exact current time.
HowTo Replace Date.now()
With Date, you use Date.now() to get the current
timestamp.
The Date.now() method returns the timestamp value in
milliseconds:
With Temporal, you use Temporal.Now.instant():
The property epochMilliseconds returns the timestamp value in
milliseconds:
Example
const instant = Temporal.Now.instant();
let timestamp = instant.epochMilliseconds;
Try it Yourself »
The property epochNanoseconds returns the timestamp value in
nanoseconds:
Example
const instant = Temporal.Now.instant();
let timestamp = instant.epochNanoseconds;
Try it Yourself »
Nanosecond precision is 1,000,000 (one million) times higher than millisecond precision.
Convert Instant Time to Local Time
A Temporal.Instant does not include time zone information.
You must convert it to a Temporal.ZonedDateTime to display local time.
toZonedDateTimeISO converts a UTC moment to a specific time zone:
Example
const instant = Temporal.Instant.from("2026-05-17T14:30:00Z");
const zoned = instant.toZonedDateTimeISO("Europe/Oslo");
Try it Yourself »
Instant = "What time is it globally?"
ZonedDateTime = "What time is it here?"
UTC vs Local Time
UTC is a global clock.
Time zone is the local view of the same clock.
| Type | Description |
|---|---|
| UTC | Same worldwide |
| Local Time | Depends on Location |
UTC (Coordinated Universal Time) is the standard time used worldwide.
It is not affected by any time zones or daylight saving time.
Why UTC is Important
UTC is used as a reference time:
- Servers and databases store time in UTC
- Logs use UTC timestmps to avoid ime confusion
- Most APIs use UTC timestamps
When to Use Temporal.Instant
- For exact moments in UTC time
- For timestamps
- For database logs
- For event logs
- For comparing moments
Compare Instant with Other Types
| Type | Meaning |
|---|---|
| Instant | Exact Moment in UTC time |
| PlainDateTime | Local Date and Time (No Timezone) |
| ZonedDateTime | Local Date and Time (+ Time Zone) |
Temporal.Instant Methods
| Constructing | |
|---|---|
| new | Creates a new Temporal.Instant object |
| from() | Creates a new Instant object from another instant or a string |
| fromEpochMilliseconds() | Returns a new Instant object from a number of milliseconds |
| fromEpochNanoseconds() | Returns a new Instant object from a number of nanoseconds |
| Arithmetic | |
| add() | Returns a new Instant with a duration added |
| round() | Returns a new Instant with this instant rounded |
| subtract() | Returns a new Instant with a duration subtracted |
| Comparing | |
| compare() | Returns -1, 0, or 1 from comparing two instants |
| equals() | Returns true if two instants are identical |
| since() | Returns the duration since another date |
| until() | Returns the duration until another date |
| Converting | |
| toZonedDateTimeISO() | Returns a new ZonedDatetime object |
| Formatting | |
| toJSON() | Returns an RFC 9557 format string for JSON serialization |
| toLocaleString() | Returns a language-sensitive representation of the instant |
| toString() | Returns an RFC 9557 format string representation of the instant |
| valueOf() | Throws a TypeError (Instants should not be converted to a primitives) |