JavaScript объект Temporal.PlainTime
Определение и применение
Temporal.PlainTime представляет время суток без даты и часового пояса. Он подходит для расписаний «каждый день в 09:00», часов работы и будильников.
Поддержка браузерами
Спецификация: proposal-temporal
Нет поддержки: Safari iOS, Samsung Android, WebView iOS.
Отдельные значения (20) поддерживаются не везде — смотрите таблицу.
| Возможность | Компьютеры | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
PlainTime | 144 | 144 | 139 | 128 | preview | 144 | 139 | 95 | 144 | |||
new PlainTime() | 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 | |||
equals | 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 | |||
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 | |||
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 | |||
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 | |||
with | 144 | 144 | 139 | 128 | preview | 144 | 139 | 95 | 144 | |||
поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31
JavaScript синтаксис
Temporal.PlainTime.from(item, options);
new Temporal.PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);Для строки '09:30' или объекта { hour: 9, minute: 30 } удобнее from(). Все аргументы конструктора необязательны и по умолчанию равны 0.
Значения параметров
| Параметр | Описание |
|---|---|
item | Строка ISO 8601 со временем, объект полей или другое значение Temporal со временем. Обязателен для from(). |
options | Необязательный параметр overflow: 'constrain' (по умолчанию) ограничивает значения допустимым диапазоном, 'reject' выдаёт ошибку. |
hour | Час: от 0 до 23. |
minute | Минуты: от 0 до 59. |
second | Секунды: от 0 до 59. |
millisecond | Миллисекунды, microsecond и nanosecond — доли секунды от 0 до 999. |
Спецификация
ECMAScript: Temporal.PlainTime.
Возвращаемое значение и особенности
Создаётся новый Temporal.PlainTime. Некорректная строка вызывает RangeError. Арифметика PlainTime идёт по кругу: add({ hours: 2 }) к 23:00 даёт 01:00 без перехода на следующий день. Чтобы учесть дату, используйте PlainDateTime или ZonedDateTime.
Свойства Temporal.PlainTime
| Свойство | Описание |
|---|---|
Temporal.PlainTime.prototype | Прототип экземпляров, содержащий их методы и свойства. |
Temporal.PlainTime.length | Число обязательных параметров конструктора: 0. |
Temporal.PlainTime.name | Строка "PlainTime". |
Temporal.PlainTime.prototype.constructor | Ссылка на конструктор Temporal.PlainTime. |
Temporal.PlainTime.prototype[Symbol.toStringTag] | Строка "Temporal.PlainTime"; её выводит Object.prototype.toString(). |
Свойства экземпляра
Свойства доступны только для чтения: чтобы изменить значение, создайте новое через with().
| Свойство | Описание |
|---|---|
hour | Час: от 0 до 23. |
minute | Минуты: от 0 до 59. |
second | Секунды: от 0 до 59. |
millisecond | Миллисекунды: от 0 до 999. |
microsecond | Микросекунды: от 0 до 999. |
nanosecond | Наносекунды: от 0 до 999. |
Методы Temporal.PlainTime
Статические методы
| Метод | Описание |
|---|---|
Temporal.PlainTime.from(item, options) | Создаёт время из строки ISO 8601, объекта полей или другого значения Temporal со временем. |
Temporal.PlainTime.compare(one, two) | Сравнивает время суток: -1, 0 или 1. Подходит для Array.prototype.sort(). |
Методы экземпляра
Методы не изменяют исходный объект: вычисления возвращают новое значение.
| Метод | Описание |
|---|---|
with(fields, options) | Новое время с заменёнными полями, например with({ minute: 0 }). |
add(duration) | Новое значение, сдвинутое вперёд на длительность. Принимает часы и меньшие единицы; результат переходит через полночь по кругу. |
subtract(duration) | Новое значение, сдвинутое назад на длительность. Принимает часы и меньшие единицы; результат переходит через полночь по кругу. |
until(other, options) | Duration от этого значения до other; параметры largestUnit, smallestUnit и округление. |
since(other, options) | Длительность от other до этого значения; обратная операция к until(). |
round(options) | Новое время, округлённое до единицы smallestUnit (от hour до nanosecond). |
equals(other) | true, если время совпадает. |
toString(options) | Строка ISO 8601. Параметры задают точность и вывод частей записи. |
toJSON() | То же, что toString() без параметров; вызывается в JSON.stringify(). |
toLocaleString(locales, options) | Строка для пользователя с учётом языка, как у Intl.DateTimeFormat. |
valueOf() | Всегда выдаёт TypeError: операторы <, > и + к Temporal не применяются. Используйте compare() или equals(). |
Примеры, попробуйте сами
Время работы и переход через полночь
Измените время открытия и закрытия. Проверьте смену, которая заканчивается после полуночи.
index.html
<p>Результат выполнения выводится в консоль.</p>
main.js
if (typeof Temporal === 'undefined') {
console.log('Этот браузер пока не поддерживает Temporal.')
} else {
const opens = Temporal.PlainTime.from('09:00')
const closes = Temporal.PlainTime.from('18:30')
const now = Temporal.PlainTime.from('17:45')
const open = Temporal.PlainTime.compare(now, opens) >= 0 && Temporal.PlainTime.compare(now, closes) < 0
console.log('Открыто:', open)
console.log('До закрытия:', now.until(closes).toString())
const shiftEnd = Temporal.PlainTime.from('23:00').add({ hours: 2 })
console.log('Смена до:', shiftEnd.toString())
console.log('Округление:', Temporal.PlainTime.from('17:47:31').round({ smallestUnit: 'minute', roundingIncrement: 15 }).toString())
}
Метод until() не переходит через полночь: для смены после 00:00 храните дату вместе со временем.
Связанные материалы
См. также обзор Temporal, PlainDate и документацию Temporal.PlainTime.