Temporal.PlainMonthDay.from()
Базовая функциональность Ограниченная доступность
Эта функция не является базовой, потому что она не работает в некоторых из наиболее широко используемых браузеров.
Статический метод Temporal.PlainMonthDay.from() создает новый объект Temporal.PlainMonthDay из другого объекта Temporal.PlainMonthDay, объекта со свойствами месяца и дня, или из строки RFC 9557.
Синтаксис
Temporal.PlainMonthDay.from(info) Temporal.PlainMonthDay.from(info, options)
Параметры
-
info - Одно из следующего:
- Экземпляр
Temporal.PlainMonthDay, который создает копию этого экземпляра. - Строка RFC 9557, содержащая дату и, опционально, календарь. Если календарь не является
iso8601, требуется год. - Объект, содержащий следующие свойства (в порядке, в котором они извлекаются и проверяются):
-
calendarНеобязательно - Строка, соответствующая свойству
calendarId. По умолчанию используется"iso8601". Все остальные свойства интерпретируются в этой календарной системе (в отличие от конструктораTemporal.PlainMonthDay(), который интерпретирует значения в календарной системе ISO). Список часто поддерживаемых типов календарей см. в разделеIntl.supportedValuesOf(). -
day - Целое число, соответствующее свойству
day. Должно быть положительным независимо от опцииoverflow. -
eraиeraYear - Строка и целое число, которые можно использовать вместо
year. См.eraиeraYearвPlainDate. Используются только в том случае, если календарная система имеет эры.eraиeraYearдолжны быть предоставлены одновременно. Если указаноmonth, необходимо предоставить по крайней мере одно изeraYear(вместе сera) илиyear. Если предоставлены всеera,eraYearиyear, они должны быть согласованы. -
month - Положительное целое число, которое можно использовать вместо
monthCode. См.monthвPlainDate. Должно быть положительным независимо от опцииoverflow. Если указаноmonth, а календарь не являетсяiso8601, то также должно быть указаноyear(илиeraYearвместе сeraв качестве замены), поскольку один и тот жеmonthможет быть сопоставлен нескольким возможным значениямmonthCodeв разные годы. Необходимо указать хотя бы один изmonthилиmonthCode. Если предоставлены обаmonthиmonthCode, они должны быть согласованы. -
monthCode - Соответствует свойству
monthCode. Необходимо указать хотя бы один изmonthилиmonthCode. Если предоставлены обаmonthиmonthCode, они должны быть согласованы. -
year - Целое число, используемое для устранения неоднозначности
month, если оно предоставлено, поскольку для некоторых календарей одно и то жеmonthможет означать разныеmonthCodeв разные годы. См.yearвPlainDate. Если год предоставлен, то опцияoverflowпроверяет месяц-день в данном году, а не в любом. Если указаноmonth, необходимо предоставить по крайней мере один изeraYear(вместе сera) илиyear. Если предоставлены всеera,eraYearиyear, они должны быть согласованы.
-
- Экземпляр
-
optionsНеобязательно - Объект, содержащий следующее свойство:
-
overflowНеобязательно - Строка, определяющая поведение, когда компонент даты выходит за пределы диапазона (при использовании объекта
info). Возможные значения:-
"constrain"(по умолчанию) - Компонент даты ограничивается допустимым диапазоном.
-
"reject" - Генерируется
RangeError, если компонент даты выходит за пределы диапазона.
-
-
Возвращаемое значение
Новый объект Temporal.PlainMonthDay, представляющий месяц и день, указанные info в указанном calendar.
Каждый PlainMonthDay внутренне хранит полную дату ISO 8601, которая имеет тот же месяц-день в целевом календаре, что и предоставляется. Ссылочный год виден при преобразовании в строку с помощью toString(), который выводит дату ISO. Ссылочный год выбирается произвольно, но последовательно (то есть каждая пара (monthCode, day) всегда сопоставляется одному и тому же ссылочному году ISO). Он не использует год, предоставленный на входе. Вместо этого ссылочный год выбирается путем нахождения самой последней даты до 31 декабря 1972 года, которая имеет тот же месяц-день в целевом календаре, или самой ранней даты после 31 декабря 1972 года, если такая дата не существует.
Например, для календарей, производных от григорианского, ссылочный год — 1972. Для еврейского календаря ссылочный год — 1972 в григорианском календаре, но если месяц — Адар I (M05L), который является високосным месяцем, ссылочный год — 1970 (5730 в еврейском календаре), потому что следующий високосный год — 1973 (5733 в еврейском календаре), который наступает после 1972 года.
Канонизация ссылочного года гарантирует, что equals() может напрямую сравнивать базовые даты ISO без дополнительных вычислений.
Исключения
-
TypeError - Генерируется в одном из следующих случаев:
-
infoне является объектом или строкой. -
optionsне является объектом илиundefined. - Предоставленные свойства недостаточны для однозначного определения даты. Обычно необходимо предоставить
year(илиeraиeraYear),monthиday, либоmonthCodeиday.
-
-
RangeError - Генерируется в одном из следующих случаев:
- Предоставленные свойства, которые определяют один и тот же компонент, являются несогласованными.
- Предоставленные нечисловые свойства недействительны; например, если
monthCodeникогда не является допустимым кодом месяца в этом календаре. - Предоставленные числовые свойства выходят за пределы диапазона, и
options.overflowустановлено в"reject". - Информация не находится в представимом диапазоне, который составляет ±(108 + 1) дней, или примерно ±273 972,6 года, от эпохи Unix.
Примеры
Создание PlainMonthDay из объекта
// Month code + day
const md = Temporal.PlainMonthDay.from({ monthCode: "M05", day: 2 });
console.log(md.toString()); // 05-02
// Month + day (only for ISO calendar)
const md2 = Temporal.PlainMonthDay.from({ month: 7, day: 1 });
console.log(md2.toString()); // 07-01
// Year + month + day
const md3 = Temporal.PlainMonthDay.from({ year: 2021, month: 7, day: 1 });
console.log(md3.toString()); // 07-01
// Year + month + day in a different calendar (where year is required)
const md4 = Temporal.PlainMonthDay.from({
year: 2021,
month: 7,
day: 1,
calendar: "hebrew",
});
console.log(md4.toString()); // 1972-03-16[u-ca=hebrew]
// Month code + day in a different calendar
const md5 = Temporal.PlainMonthDay.from({
monthCode: "M05L",
day: 1,
calendar: "hebrew",
});
console.log(md5.toString()); // 1970-02-07[u-ca=hebrew]
Управление поведением переполнения
По умолчанию значения, выходящие за пределы диапазона, ограничиваются допустимым диапазоном. Месяц-день без явного ссылочного года действителен, пока существует хотя бы один год, в котором он действителен, даже если он не появляется каждый год. Если указаны год, месяц и день, правила сопоставления с действительным месяцем-днем могут быть сложными и специфичными для каждого календаря, но вот обычное поведение:
- Если комбинация
year/monthнедействительна,monthограничивается для получения действительногоmonthCodeв этом году. - Если комбинация
year/monthCodeнедействительна, выбирается другой год, чтобы сохранитьmonthCodeкак есть. dayограничивается в данном году-месяце для получения действительного месяца-дня.
Это немного отличается от обычного ограничения даты, которое отдает предпочтение году перед кодом месяца.
// Month always out of range
const md1 = Temporal.PlainMonthDay.from({ month: 13, day: 1 });
console.log(md1.toString()); // 12-01
// Month out of range for the specific year: 5732 is not a Hebrew leap year,
// so month is clamped to 12 to resolve to a valid monthCode
const md2 = Temporal.PlainMonthDay.from({
year: 5732,
month: 13,
day: 1,
calendar: "hebrew",
});
console.log(md2.toLocaleString("en-US", { calendar: "hebrew" })); // 1 Elul
const underlyingDate = Temporal.PlainDate.from(md2.toString());
console.log(underlyingDate.year, underlyingDate.month); // 5732 12
// Month code exists but not for the specific year: 5731 is not a Hebrew leap year,
// so a different year is chosen to keep the monthCode as M05L
const md3 = Temporal.PlainMonthDay.from({
year: 5731,
monthCode: "M05L",
day: 1,
calendar: "hebrew",
});
console.log(md3.toLocaleString("en-US", { calendar: "hebrew" })); // 1 Adar I
const underlyingDate2 = Temporal.PlainDate.from(md3.toString());
console.log(underlyingDate2.year, underlyingDate2.monthCode); // 5730 M05L
// Day always out of range
const md4 = Temporal.PlainMonthDay.from({ month: 2, day: 30 });
console.log(md4.toString()); // 02-29
// Day out of range for the specific year-month
const md5 = Temporal.PlainMonthDay.from({ year: 2021, month: 2, day: 29 });
console.log(md5.toString()); // 02-28
Вы можете изменить это поведение, чтобы вместо этого генерировалась ошибка:
Temporal.PlainMonthDay.from(
{ year: 2021, month: 13, day: 1 },
{ overflow: "reject" },
);
// RangeError: date value "month" not in 1..12: 13
Спецификации
| Спецификация |
|---|
| Temporal # sec-temporal.plainmonthday.from |
Совместимость с браузерами
| Настольные | Мобильные | Серверные | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
from |
144 |
144 |
139 |
128 |
preview |
144 |
139 |
95 |
No |
No |
144 |
No |
1.4.0 |
2.7 |
26.0.0 |
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainMonthDay/from