JavaScript объект Temporal.ZonedDateTime

Определение и применение

Temporal.ZonedDateTime представляет момент времени вместе с часовым поясом и календарём. Он подходит для событий, у которых важно местное время: например, встречи завтра в 12:00 в Берлине.

Поддержка браузерами

Спецификация: proposal-temporal

Нет поддержки: Safari iOS, Samsung Android, WebView iOS.

Отдельные значения (51) поддерживаются не везде — смотрите таблицу.

Показать браузеры
Совместимостьjavascript.builtins.Temporal.ZonedDateTime
ВозможностьКомпьютерыМобильные
ChromeEdgeFirefoxOperaSafariChrome AndroidFirefox for AndroidOpera AndroidSafari on iOSSamsung BrowserWebView AndroidWebView on iOS
ZonedDateTime✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
new ZonedDateTime()✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
add✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
calendarId✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
compare✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
day✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
dayOfWeek✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
dayOfYear✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
daysInMonth✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
daysInWeek✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
daysInYear✓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×
era✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
eraYear✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
from✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
getTimeZoneTransition✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
hour✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
hoursInDay✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
inLeapYear✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
microsecond✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
millisecond✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
minute✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
month✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
monthCode✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
monthsInYear✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
nanosecond✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
offset✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
offsetNanoseconds✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
round✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
second✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
since✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
startOfDay✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
subtract✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
timeZoneId✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
toInstant✓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×
toPlainDate✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
toPlainDateTime✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
toPlainTime✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
toString✓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×
weekOfYear✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
with✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
withCalendar✓144✓144◐139

Версия 139 выпущена в 2025 г. — Частичная поддержка

Примечание MDN (англ.)

Calendars islamic, islamic-rgsa and islamic-umalqura are not available. See bug 1950425 and bug 1954138.

✓128✓preview✓144◐139

Версия 139 выпущена в 2025 г. — Частичная поддержка

Примечание MDN (англ.)

Calendars islamic, islamic-rgsa and islamic-umalqura are not available. See bug 1950425 and bug 1954138.

✓95××✓144×
withPlainTime✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
withTimeZone✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
year✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
yearOfWeek✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×

поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31

JavaScript синтаксис

JavaScript
Temporal.ZonedDateTime.from(item, options);
new Temporal.ZonedDateTime(epochNanoseconds, timeZone, calendar);

Для строки или набора полей удобнее from(). Конструктор принимает точный момент в наносекундах.

Значения параметров

Параметры создания Temporal.ZonedDateTime
ПараметрОписание
itemСтрока с часовым поясом в квадратных скобках, объект полей или другой ZonedDateTime. Обязателен для from().
optionsНеобязательные настройки disambiguation, overflow и offset.
epochNanosecondsЧисло наносекунд от Unix-эпохи, тип bigint. Обязательно для конструктора.
timeZoneЧасовой пояс, например Europe/Berlin. Обязателен для конструктора.
calendarКалендарь; по умолчанию iso8601.

Спецификация

ECMAScript: Temporal.ZonedDateTime.

Возвращаемое значение и особенности

Создаётся новый Temporal.ZonedDateTime. Метод withTimeZone() сохраняет момент, меняя местное представление. Метод toInstant() возвращает этот момент без часового пояса.

Некорректная строка или часовой пояс вызывают RangeError. При disambiguation: 'reject' эта ошибка возникает и для неоднозначного местного времени.

Сутки и точная длительность

add({ days: 1 }) прибавляет календарный день, а add({ hours: 24 }) — точную длительность. При переводе часов результаты могут различаться.

Неоднозначное местное время

При переводе часов время может отсутствовать или повторяться. Параметр disambiguation задаёт выбор: earlier или later. Режим reject выдаёт ошибку; стандартный compatible выбирает более поздний вариант для пропуска и более ранний для повторения. В демонстрации сначала выбран reject, чтобы неоднозначность была заметна.

Свойства Temporal.ZonedDateTime

Свойства конструктора Temporal.ZonedDateTime
СвойствоОписание
Temporal.ZonedDateTime.prototypeПрототип экземпляров, содержащий их методы и свойства.
Temporal.ZonedDateTime.lengthЧисло обязательных параметров конструктора: 2.
Temporal.ZonedDateTime.nameСтрока "ZonedDateTime".
Temporal.ZonedDateTime.prototype.constructorСсылка на конструктор Temporal.ZonedDateTime.
Temporal.ZonedDateTime.prototype[Symbol.toStringTag]Строка "Temporal.ZonedDateTime"; её выводит Object.prototype.toString().

Свойства экземпляра

Свойства доступны только для чтения: чтобы изменить значение, создайте новое через with() или арифметику.

Свойства экземпляра Temporal.ZonedDateTime
СвойствоОписание
timeZoneIdИдентификатор часового пояса, например "Europe/Berlin".
calendarIdИдентификатор календаря, например "iso8601".
eraЭра календаря или undefined, если в календаре нет эр (как в ISO 8601).
eraYearГод внутри эры или undefined, если в календаре нет эр.
yearГод; для ISO 8601 — астрономический год (1 г. до н. э. — это 0).
monthПорядковый номер месяца в году, начиная с 1.
monthCodeКод месяца, например "M02"; однозначен и для календарей с високосными месяцами.
dayДень месяца, начиная с 1.
hourЧас: от 0 до 23.
minuteМинуты: от 0 до 59.
secondСекунды: от 0 до 59.
millisecondМиллисекунды: от 0 до 999.
microsecondМикросекунды: от 0 до 999.
nanosecondНаносекунды: от 0 до 999.
epochMillisecondsМомент в миллисекундах от Unix-эпохи, как у Date.prototype.getTime().
epochNanosecondsМомент в наносекундах от Unix-эпохи, тип bigint.
offsetСмещение UTC строкой, например "+02:00".
offsetNanosecondsСмещение UTC в наносекундах.
hoursInDayДлина текущих суток в часах в этом часовом поясе: обычно 24, в день перевода часов — 23 или 25.
dayOfWeekДень недели: от 1 (понедельник) до 7 (воскресенье).
dayOfYearПорядковый номер дня в году, начиная с 1.
weekOfYearНомер недели в году по ISO 8601 или undefined для календарей без недель.
yearOfWeekГод, к которому относится неделя weekOfYear; в конце декабря и начале января может отличаться от year.
daysInWeekЧисло дней в неделе; для ISO 8601 — 7.
daysInMonthЧисло дней в месяце.
daysInYearЧисло дней в году: 365 или 366 для ISO 8601.
monthsInYearЧисло месяцев в году; для ISO 8601 — 12.
inLeapYeartrue, если год високосный.

Методы Temporal.ZonedDateTime

Статические методы

Статические методы Temporal.ZonedDateTime
МетодОписание
Temporal.ZonedDateTime.from(item, options)Создаёт значение из строки с часовым поясом в квадратных скобках, объекта полей или другого ZonedDateTime.
Temporal.ZonedDateTime.compare(one, two)Сравнивает точные моменты: -1, 0 или 1. Подходит для Array.prototype.sort().

Методы экземпляра

Методы не изменяют исходный объект: вычисления возвращают новое значение.

Методы экземпляра Temporal.ZonedDateTime
МетодОписание
with(fields, options)Новое значение с заменёнными полями даты и времени; параметры disambiguation, offset и overflow.
withPlainTime(time)Новое значение с тем же днём и другим временем; без аргумента — начало суток.
withTimeZone(timeZone)Тот же момент в другом часовом поясе.
withCalendar(calendar)То же значение в другом календаре.
add(duration, options)Новое значение, сдвинутое вперёд на длительность. Дни и большие единицы считаются по календарю, часы и меньшие — точно.
subtract(duration, options)Новое значение, сдвинутое назад на длительность. Дни и большие единицы считаются по календарю, часы и меньшие — точно.
until(other, options)Duration от этого значения до other; параметры largestUnit, smallestUnit и округление.
since(other, options)Длительность от other до этого значения; обратная операция к until().
round(options)Новое значение, округлённое до единицы smallestUnit (от day до nanosecond).
equals(other)true, если совпадают момент, часовой пояс и календарь.
startOfDay()Начало текущих суток в этом часовом поясе; в некоторых поясах это не 00:00.
getTimeZoneTransition(direction)Ближайший перевод часов "next" или "previous"; null, если переходов нет.
toInstant()Instant того же момента без часового пояса.
toPlainDate()PlainDate с местной датой.
toPlainTime()PlainTime с местным временем.
toPlainDateTime()PlainDateTime с местной датой и временем без часового пояса.
toString(options)Строка ISO 8601. Параметры задают точность и вывод частей записи.
toJSON()То же, что toString() без параметров; вызывается в JSON.stringify().
toLocaleString(locales, options)Строка для пользователя с учётом языка, как у Intl.DateTimeFormat.
valueOf()Всегда выдаёт TypeError: операторы <, > и + к Temporal не применяются. Используйте compare() или equals().

Примеры, попробуйте сами

Один момент в двух часовых поясах

Измените дату и часовой пояс. Сравните местное время и результат toInstant().

index.html
HTML
<p>Результат выполнения выводится в консоль.</p>
main.js
JavaScript
if (typeof Temporal === 'undefined') {
    console.log('Этот браузер пока не поддерживает Temporal.')
} else {
    const meeting = Temporal.ZonedDateTime.from('2026-03-28T12:00[Europe/Berlin]')
    const tokyo = meeting.withTimeZone('Asia/Tokyo')
    console.log('Берлин:', meeting.toString())
    console.log('Токио:', tokyo.toString())
    console.log('Момент в UTC:', meeting.toInstant().toString())
    console.log('Момент совпадает:', meeting.epochNanoseconds === tokyo.epochNanoseconds)
}

Сутки или 24 часа: интерактивная демонстрация

Выберите пример или свою дату. Сравните местное время, UTC и прошедшие часы, затем изучите полученный код. Демонстрация проверяет поддержку Temporal в вашем браузере.

Календарные сутки сохраняют местное время следующего дня, если оно существует. 24 часа задают точную длительность. При переводе часов результаты могут различаться. Например, от полудня 28 марта до полудня 29 марта 2026 года в Берлине проходит 23 часа.

Проверяем поддержку Temporal…

Дата и часовой пояс

compatible выбирает ранний вариант при повторении времени и сдвигает вперёд при пропуске. При прибавлении календарных суток Temporal использует совместимое разрешение; настройка выше относится к исходному времени.

Выберите пример или введите дату.

Код с нативным Temporal

Для интерактивного сравнения включите JavaScript и используйте браузер с Temporal. При осеннем переводе часов календарные сутки могут длиться 25 часов.

См. также объект Date, конвертер Unix timestamp и документацию Temporal.ZonedDateTime.