JavaScript объект Temporal.PlainYearMonth
Определение и применение
Temporal.PlainYearMonth представляет год и месяц без дня. Он подходит для отчётных периодов, срока действия карты и выбора месяца в форме input type="month".
Поддержка браузерами
Спецификация: proposal-temporal
Нет поддержки: Safari iOS, Samsung Android, WebView iOS.
Отдельные значения (24) поддерживаются не везде — смотрите таблицу.
| Возможность | Компьютеры | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
PlainYearMonth | 144 | 144 | 139 | 128 | preview | 144 | 139 | 95 | 144 | |||
new PlainYearMonth() | 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 | |||
daysInMonth | 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 | |||
inLeapYear | 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 | |||
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 | |||
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 | |||
year | 144 | 144 | 139 | 128 | preview | 144 | 139 | 95 | 144 | |||
поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31
JavaScript синтаксис
Temporal.PlainYearMonth.from(item, options);
new Temporal.PlainYearMonth(year, month, calendar, referenceDay);Для строки '2026-10' или объекта { year: 2026, month: 10 } удобнее from().
Значения параметров
| Параметр | Описание |
|---|---|
item | Строка ISO 8601 вида ГГГГ-ММ, объект полей или другое значение Temporal. Обязателен для from(). |
options | Необязательный параметр overflow: 'constrain' (по умолчанию) ограничивает значения допустимым диапазоном, 'reject' выдаёт ошибку. |
year | Год. Обязателен для конструктора. |
month | Месяц: от 1 до 12. Обязателен для конструктора. |
calendar | Календарь; по умолчанию iso8601. |
referenceDay | Служебный день для календарей, отличных от ISO 8601; по умолчанию 1. |
Спецификация
ECMAScript: Temporal.PlainYearMonth.
Возвращаемое значение и особенности
Создаётся новый Temporal.PlainYearMonth. Некорректная строка вызывает RangeError. Чтобы получить конкретный день месяца, вызовите toPlainDate({ day }). Арифметика принимает годы и месяцы.
Свойства Temporal.PlainYearMonth
| Свойство | Описание |
|---|---|
Temporal.PlainYearMonth.prototype | Прототип экземпляров, содержащий их методы и свойства. |
Temporal.PlainYearMonth.length | Число обязательных параметров конструктора: 2. |
Temporal.PlainYearMonth.name | Строка "PlainYearMonth". |
Temporal.PlainYearMonth.prototype.constructor | Ссылка на конструктор Temporal.PlainYearMonth. |
Temporal.PlainYearMonth.prototype[Symbol.toStringTag] | Строка "Temporal.PlainYearMonth"; её выводит Object.prototype.toString(). |
Свойства экземпляра
Свойства доступны только для чтения: чтобы изменить значение, создайте новое через with().
| Свойство | Описание |
|---|---|
calendarId | Идентификатор календаря, например "iso8601". |
era | Эра календаря или undefined, если в календаре нет эр (как в ISO 8601). |
eraYear | Год внутри эры или undefined, если в календаре нет эр. |
year | Год; для ISO 8601 — астрономический год (1 г. до н. э. — это 0). |
month | Порядковый номер месяца в году, начиная с 1. |
monthCode | Код месяца, например "M02"; однозначен и для календарей с високосными месяцами. |
daysInMonth | Число дней в месяце. |
daysInYear | Число дней в году: 365 или 366 для ISO 8601. |
monthsInYear | Число месяцев в году; для ISO 8601 — 12. |
inLeapYear | true, если год високосный. |
Методы Temporal.PlainYearMonth
Статические методы
| Метод | Описание |
|---|---|
Temporal.PlainYearMonth.from(item, options) | Создаёт значение из строки ISO 8601, объекта полей или другого значения Temporal. |
Temporal.PlainYearMonth.compare(one, two) | Сравнивает месяцы: -1, 0 или 1. Подходит для Array.prototype.sort(). |
Методы экземпляра
Методы не изменяют исходный объект: вычисления возвращают новое значение.
| Метод | Описание |
|---|---|
with(fields, options) | Новое значение с заменёнными годом или месяцем. |
add(duration, options) | Новое значение, сдвинутое вперёд на длительность. Принимает годы и месяцы. |
subtract(duration, options) | Новое значение, сдвинутое назад на длительность. Принимает годы и месяцы. |
until(other, options) | Duration от этого значения до other; параметры largestUnit, smallestUnit и округление. |
since(other, options) | Длительность от other до этого значения; обратная операция к until(). |
equals(other) | true, если совпадают год, месяц и календарь. |
toPlainDate(fields) | PlainDate с указанным днём, например toPlainDate({ day: 1 }). |
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 period = Temporal.PlainYearMonth.from('2026-02')
console.log('Дней в периоде:', period.daysInMonth)
console.log('Первый и последний день:', period.toPlainDate({ day: 1 }).toString(), period.toPlainDate({ day: period.daysInMonth }).toString())
console.log('Следующий период:', period.add({ months: 1 }).toString())
const expires = Temporal.PlainYearMonth.from({ year: 2028, month: 5 })
console.log('Карта действует ещё:', period.until(expires, { largestUnit: 'years' }).toString())
}
Метод until() с параметром largestUnit выражает остаток в годах и месяцах.
Связанные материалы
См. также обзор Temporal, PlainDate и документацию Temporal.PlainYearMonth.