JavaScript объект Temporal.PlainDateTime
Определение и применение
Temporal.PlainDateTime представляет дату и время без часового пояса. Он подходит для «настенного» времени: например, время в билете или в форме input type="datetime-local", когда часовой пояс задаётся отдельно.
Поддержка браузерами
Спецификация: proposal-temporal
Нет поддержки: Safari iOS, Samsung Android, WebView iOS.
Отдельные значения (41) поддерживаются не везде — смотрите таблицу.
| Возможность | Компьютеры | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
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 | 128 | preview | 144 | 139 Версия 139 выпущена в 2025 г. — Частичная поддержка Примечание MDN (англ.) Calendars | 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 синтаксис
Temporal.PlainDateTime.from(item, options);
new Temporal.PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);Для строки '2026-10-27T09:30' или объекта полей удобнее from(). В конструкторе обязательны год, месяц и день.
Значения параметров
| Параметр | Описание |
|---|---|
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.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().
| Свойство | Описание |
|---|---|
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. |
inLeapYear | true, если год високосный. |
Методы Temporal.PlainDateTime
Статические методы
| Метод | Описание |
|---|---|
Temporal.PlainDateTime.from(item, options) | Создаёт значение из строки ISO 8601, объекта полей или другого значения Temporal с датой. |
Temporal.PlainDateTime.compare(one, two) | Сравнивает значения: -1, 0 или 1. Подходит для Array.prototype.sort(). |
Методы экземпляра
Методы не изменяют исходный объект: вычисления возвращают новое значение.
| Метод | Описание |
|---|---|
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
<p>Результат выполнения выводится в консоль.</p>
main.js
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.