JavaScript объект Temporal.PlainYearMonth

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

Temporal.PlainYearMonth представляет год и месяц без дня. Он подходит для отчётных периодов, срока действия карты и выбора месяца в форме input type="month".

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

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

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

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

Показать браузеры
Совместимостьjavascript.builtins.Temporal.PlainYearMonth
ВозможностьКомпьютерыМобильные
ChromeEdgeFirefoxOperaSafariChrome AndroidFirefox for AndroidOpera AndroidSafari on iOSSamsung BrowserWebView AndroidWebView on iOS
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 синтаксис

JavaScript
Temporal.PlainYearMonth.from(item, options);
new Temporal.PlainYearMonth(year, month, calendar, referenceDay);

Для строки '2026-10' или объекта { year: 2026, month: 10 } удобнее from().

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

Параметры создания Temporal.PlainYearMonth
ПараметрОписание
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
СвойствоОписание
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().

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

Методы Temporal.PlainYearMonth

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

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

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

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

Методы экземпляра Temporal.PlainYearMonth
МетодОписание
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
HTML
<p>Результат выполнения выводится в консоль.</p>
main.js
JavaScript
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.