JavaScript объект Temporal.Instant
Определение и применение
Temporal.Instant представляет точный момент времени без часового пояса и календаря. Он подходит для логов, отметок времени в API и сроков, отсчитываемых в часах: например, «ссылка действует 48 часов».
Поддержка браузерами
Спецификация: proposal-temporal
Нет поддержки: Safari iOS, Samsung Android, WebView iOS.
Отдельные значения (18) поддерживаются не везде — смотрите таблицу.
| Возможность | Компьютеры | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
Instant | 144 | 144 | 139 | 128 | preview | 144 | 139 | 95 | 144 | |||
new Instant() | 144 | 144 | 139 | 128 | preview | 144 | 139 | 95 | 144 | |||
add | 144 | 144 | 139 | 128 | preview | 144 | 139 | 95 | 144 | |||
compare | 144 | 144 | 139 | 128 | preview | 144 | 139 | 95 | 144 | |||
epochMilliseconds | 144 | 144 | 139 | 128 | preview | 144 | 139 | 95 | 144 | |||
epochNanoseconds | 144 | 144 | 139 | 128 | preview | 144 | 139 | 95 | 144 | |||
equals | 144 | 144 | 139 | 128 | preview | 144 | 139 | 95 | 144 | |||
from | 144 | 144 | 139 | 128 | preview | 144 | 139 | 95 | 144 | |||
fromEpochMilliseconds | 144 | 144 | 139 | 128 | preview | 144 | 139 | 95 | 144 | |||
fromEpochNanoseconds | 144 | 144 | 139 | 128 | preview | 144 | 139 | 95 | 144 | |||
round | 144 | 144 | 139 | 128 | preview | 144 | 139 | 95 | 144 | |||
since | 144 | 144 | 139 | 128 | preview | 144 | 139 | 95 | 144 | |||
subtract | 144 | 144 | 139 | 128 | preview | 144 | 139 | 95 | 144 | |||
toJSON | 144 | 144 | 139 | 128 | preview | 144 | 139 | 95 | 144 | |||
toLocaleString | 144 | 144 | 139 | 128 | preview | 144 | 139 | 95 | 144 | |||
toString | 144 | 144 | 139 | 128 | preview | 144 | 139 | 95 | 144 | |||
toZonedDateTimeISO | 144 | 144 | 139 | 128 | preview | 144 | 139 | 95 | 144 | |||
until | 144 | 144 | 139 | 128 | preview | 144 | 139 | 95 | 144 | |||
valueOf | 144 | 144 | 139 | 128 | preview | 144 | 139 | 95 | 144 | |||
поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31
JavaScript синтаксис
Temporal.Instant.from(item);
Temporal.Instant.fromEpochMilliseconds(epochMilliseconds);
new Temporal.Instant(epochNanoseconds);Строка для from() должна содержать смещение UTC или Z: без него момент не определён. Текущий момент возвращает Temporal.Now.instant().
Значения параметров
| Параметр | Описание |
|---|---|
item | Строка ISO 8601 со смещением, например '2026-10-27T09:30:00Z', или другой Instant. |
epochMilliseconds | Число миллисекунд от Unix-эпохи, как у Date.prototype.getTime(). |
epochNanoseconds | Число наносекунд от Unix-эпохи, тип bigint. Обязательно для конструктора. |
Спецификация
Возвращаемое значение и особенности
Создаётся новый Temporal.Instant. Свойства epochMilliseconds и epochNanoseconds возвращают момент числом. Метод toZonedDateTimeISO() показывает этот момент в выбранном часовом поясе, а toString() по умолчанию выводит его в UTC.
Методы add() и subtract() принимают только часы и меньшие единицы. Дни, месяцы и годы вызывают RangeError: их длина зависит от календаря и часового пояса. Для календарных вычислений перейдите к Temporal.ZonedDateTime.
Свойства Temporal.Instant
| Свойство | Описание |
|---|---|
Temporal.Instant.prototype | Прототип экземпляров, содержащий их методы и свойства. |
Temporal.Instant.length | Число обязательных параметров конструктора: 1. |
Temporal.Instant.name | Строка "Instant". |
Temporal.Instant.prototype.constructor | Ссылка на конструктор Temporal.Instant. |
Temporal.Instant.prototype[Symbol.toStringTag] | Строка "Temporal.Instant"; её выводит Object.prototype.toString(). |
Свойства экземпляра
Свойства доступны только для чтения: чтобы изменить значение, создайте новое через add(), subtract() или round().
| Свойство | Описание |
|---|---|
epochMilliseconds | Момент в миллисекундах от Unix-эпохи, как у Date.prototype.getTime(); дробная часть отбрасывается вниз. |
epochNanoseconds | Момент в наносекундах от Unix-эпохи, тип bigint. |
Методы Temporal.Instant
Статические методы
| Метод | Описание |
|---|---|
Temporal.Instant.from(item) | Создаёт момент из строки ISO 8601 со смещением UTC или из другого Instant. |
Temporal.Instant.fromEpochMilliseconds(epochMilliseconds) | Создаёт момент из миллисекунд от Unix-эпохи. |
Temporal.Instant.fromEpochNanoseconds(epochNanoseconds) | Создаёт момент из наносекунд от Unix-эпохи (bigint). |
Temporal.Instant.compare(one, two) | Сравнивает моменты: -1, 0 или 1. Подходит для Array.prototype.sort(). |
Методы экземпляра
Методы не изменяют исходный объект: вычисления возвращают новое значение.
| Метод | Описание |
|---|---|
add(duration) | Новое значение, сдвинутое вперёд на длительность. Принимает только часы и меньшие единицы. |
subtract(duration) | Новое значение, сдвинутое назад на длительность. Принимает только часы и меньшие единицы. |
until(other, options) | Duration от этого значения до other; параметры largestUnit, smallestUnit и округление. |
since(other, options) | Длительность от other до этого значения; обратная операция к until(). |
round(options) | Новый момент, округлённый до единицы smallestUnit (от hour до nanosecond). |
equals(other) | true, если моменты совпадают. |
toZonedDateTimeISO(timeZone) | ZonedDateTime этого момента в часовом поясе и календаре ISO 8601. |
toString(options) | Строка ISO 8601. Параметры задают точность и вывод частей записи. |
toJSON() | То же, что toString() без параметров; вызывается в JSON.stringify(). |
toLocaleString(locales, options) | Строка для пользователя с учётом языка, как у Intl.DateTimeFormat. |
valueOf() | Всегда выдаёт TypeError: операторы <, > и + к Temporal не применяются. Используйте compare() или equals(). |
Примеры, попробуйте сами
Instant, Date и часовые пояса
Измените момент или часовой пояс. Сравните миллисекунды для Date и местное представление одного момента.
index.html
<p>Результат выполнения выводится в консоль.</p>
main.js
if (typeof Temporal === 'undefined') {
console.log('Этот браузер пока не поддерживает Temporal.')
} else {
const instant = Temporal.Instant.from('2026-10-27T09:30:00Z')
console.log('Миллисекунды для Date:', instant.epochMilliseconds)
console.log('Из Date:', Temporal.Instant.fromEpochMilliseconds(new Date('2026-10-27T09:30:00Z').getTime()).toString())
console.log('Москва:', instant.toZonedDateTimeISO('Europe/Moscow').toString())
console.log('Нью-Йорк:', instant.toZonedDateTimeISO('America/New_York').toString())
console.log('Строка со смещением:', instant.toString({ timeZone: 'Asia/Tokyo' }))
}
Чтобы перейти от Date к Temporal, передайте getTime() в fromEpochMilliseconds(). Обратно — new Date(instant.epochMilliseconds).
Срок действия в часах
Измените число часов и время проверки. Попробуйте округлить срок до часа и прибавить дни.
index.html
<p>Результат выполнения выводится в консоль.</p>
main.js
if (typeof Temporal === 'undefined') {
console.log('Этот браузер пока не поддерживает Temporal.')
} else {
const created = Temporal.Instant.from('2026-10-27T09:30:15.250Z')
const deadline = created.add({ hours: 48 })
console.log('Срок:', deadline.toString())
console.log('До минуты:', deadline.round({ smallestUnit: 'minute', roundingMode: 'floor' }).toString())
const checked = Temporal.Instant.from('2026-10-28T21:00:00Z')
console.log('Осталось:', checked.until(deadline, { largestUnit: 'hours' }).toString())
// У Instant нет календаря, поэтому дни и месяцы прибавлять нельзя.
try {
created.add({ days: 1 })
} catch (error) {
console.log('add({ days: 1 }):', error.name)
}
}
Метод round() с roundingMode: 'floor' отбрасывает секунды, не сдвигая срок позже. Метод until() возвращает Temporal.Duration.
Связанные материалы
См. также обзор Temporal, объект Date, конвертер Unix timestamp и документацию Temporal.Instant.