Temporal.Instant
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.
The Temporal.Instant
object represents a unique point in history, with nanosecond precision. It is fundamentally represented as the number of nanoseconds since the Unix epoch (midnight at the beginning of January 1, 1970, UTC), without any time zone or calendar system.
Description
Temporal.Instant
is semantically the same as Date
. They both encapsulate a single point in time, but Temporal.Instant
is more precise because it stores nanoseconds rather than milliseconds. Temporal.Instant
also avoids pitfalls of Date
because it does not assume any calendar or time zone information—if you want to read any date or time information such as year or month, you need to convert it to a Temporal.ZonedDateTime
first, using toZonedDateTimeISO()
.
You can convert from Date
to Temporal.Instant
using the Date.prototype.toTemporalInstant()
method, which should be preferred over other methods such as Temporal.Instant.fromEpochMilliseconds()
because the former involves less user code and may be more optimized. You can also convert from Temporal.Instant
to Date
using its epoch milliseconds, such as new Date(instant.epochMilliseconds)
.
RFC 9557 format
Instant
objects can be serialized and parsed using the RFC 9557 format, an extension to the ISO 8601 / RFC 3339 format. The string has the following form (spaces are only for readability and should not be present in the actual string):
YYYY-MM-DD T HH:mm:ss.sssssssss Z/±HH:mm:ss.sssssssss
YYYY
-
Either a four-digit number, or a six-digit number with a
+
or-
sign. MM
-
A two-digit number from
01
to12
. DD
-
A two-digit number from
01
to31
. TheYYYY
,MM
, andDD
components can be separated by-
or nothing. T
-
The date-time separator, which can be
T
,t
, or a space. HH
-
A two-digit number from
00
to23
. mm
Optional-
A two-digit number from
00
to59
. Defaults to00
. ss.sssssssss
Optional-
A two-digit number from
00
to59
. May optionally be followed by a.
or,
and one to nine digits. Defaults to00
. TheHH
,mm
, andss
components can be separated by:
or nothing. You can omit either justss
or bothss
andmm
, so the time can be one of three forms:HH
,HH:mm
, orHH:mm:ss.sssssssss
. Z/±HH:mm:ss.sssssssss
-
Either the UTC designator
Z
orz
, or an offset from UTC in the form+
or-
followed by the same format as the time component. Note that subminute precision may be unsupported by other systems. If an offset is provided, the time is interpreted in the specified offset.
As an input, you may optionally include the time zone identifier and calendar, in the same format as ZonedDateTime
, but they will be ignored. Other annotations in the [key=value]
format are also ignored, and they must not have the critical flag.
When serializing, you can configure the fractional second digits and offset.
Constructor
Temporal.Instant()
Experimental-
Creates a new
Temporal.Instant
object by directly supplying the underlying data.
Static methods
Temporal.Instant.compare()
Experimental-
Returns a number (-1, 0, or 1) indicating whether the first instant comes before, is the same as, or comes after the second instant. Equivalent to comparing the
epochNanoseconds
of the two instants. Temporal.Instant.from()
Experimental-
Creates a new
Temporal.Instant
object from anotherTemporal.Instant
object, or an RFC 9557 string. Temporal.Instant.fromEpochMilliseconds()
Experimental-
Creates a new
Temporal.Instant
object from the number of milliseconds since the Unix epoch (midnight at the beginning of January 1, 1970, UTC). Temporal.Instant.fromEpochNanoseconds()
Experimental-
Creates a new
Temporal.Instant
object from the number of nanoseconds since the Unix epoch (midnight at the beginning of January 1, 1970, UTC).
Instance properties
These properties are defined on Temporal.Instant.prototype
and shared by all Temporal.Instant
instances.
Temporal.Instant.prototype.constructor
-
The constructor function that created the instance object. For
Temporal.Instant
instances, the initial value is theTemporal.Instant()
constructor. Temporal.Instant.prototype.epochMilliseconds
Experimental-
Returns an integer representing the number of milliseconds elapsed since the Unix epoch (midnight at the beginning of January 1, 1970, UTC) to this instant. Equivalent to dividing
epochNanoseconds
by1e6
and flooring it. Temporal.Instant.prototype.epochNanoseconds
Experimental-
Returns a
BigInt
representing the number of nanoseconds since the Unix epoch (midnight at the beginning of January 1, 1970, UTC) to this instant. Temporal.Instant.prototype[Symbol.toStringTag]
-
The initial value of the
[Symbol.toStringTag]
property is the string"Temporal.Instant"
. This property is used inObject.prototype.toString()
.
Instance methods
Temporal.Instant.prototype.add()
Experimental-
Returns a new
Temporal.Instant
object representing this instant moved forward by a given duration (in a form convertible byTemporal.Duration.from()
). Temporal.Instant.prototype.equals()
Experimental-
Returns
true
if this instant is equivalent in value to another instant (in a form convertible byTemporal.Instant.from()
), andfalse
otherwise. They are compared by their epoch nanoseconds. Equivalent toTemporal.Instant.compare(this, other) === 0
. Temporal.Instant.prototype.round()
Experimental-
Returns a new
Temporal.Instant
object representing this instant rounded to the given unit. Temporal.Instant.prototype.since()
Experimental-
Returns a new
Temporal.Duration
object representing the duration from another instant (in a form convertible byTemporal.Instant.from()
) to this instant. The duration is positive if the other instant is before this instant, and negative if after. Temporal.Instant.prototype.subtract()
Experimental-
Returns a new
Temporal.Instant
object representing this instant moved backward by a given duration (in a form convertible byTemporal.Duration.from()
). Temporal.Instant.prototype.toJSON()
Experimental-
Returns a string representing this instant in the same RFC 9557 format as calling
toString()
. Intended to be implicitly called byJSON.stringify()
. Temporal.Instant.prototype.toLocaleString()
Experimental-
Returns a string with a language-sensitive representation of this instant. In implementations with
Intl.DateTimeFormat
API support, this method delegates toIntl.DateTimeFormat
. Temporal.Instant.prototype.toString()
Experimental-
Returns a string representing this instant in the RFC 9557 format using the specified time zone.
Temporal.Instant.prototype.toZonedDateTimeISO()
Experimental-
Returns a new
Temporal.ZonedDateTime
object representing this instant in the specified time zone using the ISO 8601 calendar system. Temporal.Instant.prototype.until()
Experimental-
Returns a new
Temporal.Duration
object representing the duration from this instant to another instant (in a form convertible byTemporal.Instant.from()
). The duration is positive if the other instant is after this instant, and negative if before. Temporal.Instant.prototype.valueOf()
Experimental-
Throws a
TypeError
, which preventsTemporal.Instant
instances from being implicitly converted to primitives when used in arithmetic or comparison operations.
Specifications
Specification |
---|
Temporal proposal # sec-temporal-instant-objects |
Browser compatibility
BCD tables only load in the browser