JavaScript объект Temporal.PlainDateTime

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

Temporal.PlainDateTime представляет дату и время без часового пояса. Он подходит для «настенного» времени: например, время в билете или в форме input type="datetime-local", когда часовой пояс задаётся отдельно.

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

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

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

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

Показать браузеры
Совместимостьjavascript.builtins.Temporal.PlainDateTime
ВозможностьКомпьютерыМобильные
ChromeEdgeFirefoxOperaSafariChrome AndroidFirefox for AndroidOpera AndroidSafari on iOSSamsung BrowserWebView AndroidWebView on iOS
PlainDateTime✓144✓144✓139✓128✓preview✓144✓139✓95××✓144×
new PlainDateTime()✓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×
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×
hour✓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×
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×
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×
toPlainDate✓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×
toZonedDateTime✓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×
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.PlainDateTime.from(item, options);
new Temporal.PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);

Для строки '2026-10-27T09:30' или объекта полей удобнее from(). В конструкторе обязательны год, месяц и день.

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

Параметры создания Temporal.PlainDateTime
ПараметрОписание
itemСтрока ISO 8601, объект полей или другое значение Temporal с датой. Обязателен для from().
optionsНеобязательный параметр overflow: 'constrain' (по умолчанию) ограничивает значения допустимым диапазоном, 'reject' выдаёт ошибку.
yearГод, month (от 1 до 12) и day. Обязательны для конструктора.
hourЧас и меньшие единицы времени; по умолчанию 0.
calendarКалендарь; по умолчанию iso8601.

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

ECMAScript: Temporal.PlainDateTime.

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

Создаётся новый Temporal.PlainDateTime. Некорректная строка вызывает RangeError. PlainDateTime не обозначает конкретный момент: 09:30 в Москве и в Берлине — разные моменты. Чтобы получить момент, вызовите toZonedDateTime(timeZone). Арифметика не учитывает переводы часов; для этого используйте ZonedDateTime.

Свойства Temporal.PlainDateTime

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

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

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

Свойства экземпляра Temporal.PlainDateTime
СвойствоОписание
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.
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.PlainDateTime

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

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

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

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

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

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

Значение поля datetime-local

Измените время и часовой пояс. Сравните один и тот же «настенный» час в разных городах.

index.html
HTML
<p>Результат выполнения выводится в консоль.</p>
main.js
JavaScript
if (typeof Temporal === 'undefined') {
    console.log('Этот браузер пока не поддерживает Temporal.')
} else {
    // Строка в формате поля input type="datetime-local".
    const local = Temporal.PlainDateTime.from('2026-10-27T09:30')
    console.log('Ввод:', local.toString())
    console.log('День недели:', local.dayOfWeek)
    for (const zone of ['Europe/Moscow', 'Europe/Berlin']) {
        console.log(zone, local.toZonedDateTime(zone).toInstant().toString())
    }
    console.log('Через 2 часа:', local.add({ hours: 2 }).toString())
    console.log('Только дата:', local.toPlainDate().toString())
}

Метод toZonedDateTime() превращает «настенное» время в точный момент выбранного часового пояса.

См. также обзор Temporal, PlainDate и документацию Temporal.PlainDateTime.