Spec-Zone.ru › JavaScript

Temporal.PlainDate.prototype.monthCode

Базовая поддержка Ограниченная доступность

Эта функция не является базовой, потому что она не работает в некоторых из наиболее широко используемых браузеров.

Свойство-аксессор monthCode экземпляров Temporal.PlainDate возвращает строку, зависящую от календаря и представляющую месяц этой даты. Оно зависит от календаря.

Значение

Базовый формат monthCode — это M плюс двузначный номер месяца. Для високосных месяцев используется код предыдущего месяца, за которым следует L (даже если он концептуально является производным от следующего месяца; например, в еврейском календаре Адар I имеет код M05L, а Адар II — код M06).

Все календари имеют как минимум 12 месяцев с кодами от "M01" до "M12".

Все указанные календари имеют коды месяцев, полностью определенные спецификацией. Большинство не имеют правил для месяцев, отличных от iso8601. Календари coptic, ethioaa и ethiopic имеют дополнительный месяц M13. Календари chinese и dangi имеют 12 дополнительных возможных високосных месяцев с кодами от "M01L" до "M12L". Календарь hebrew имеет один високосный месяц, "M05L" (Адар I).

Примечание: Не предполагайте, что monthCode является удобной для пользователя строкой; вместо этого используйте toLocaleString() для форматирования даты. Как правило, не кэшируйте названия месяцев в массиве или объекте. Хотя monthCode обычно соответствует названию месяца в пределах одного календаря, мы рекомендуем всегда вычислять название месяца, используя, например, date.toLocaleString("en-US", { calendar: date.calendarId, month: "long" }).

Сет-аксессор monthCode — это undefined. Вы не можете изменить это свойство напрямую. Используйте метод with() для создания нового объекта Temporal.PlainDate с желаемым новым значением.

При установке даты на другой год monthCode остается тем же, но month может измениться, если целевой год имеет другую структуру високосных месяцев. Если текущий monthCode не существует в целевом году и метод не настроен на отклонение, то для календарей chinese и dangi вместо него используется предыдущий месяц (например, с "M03L" на "M03", что означает с 闰三月 на 三月). Для hebrew используется следующий месяц (с "M05L" на "M06", что означает с Адар I на Адар II).

Примеры

Использование monthCode

const date = Temporal.PlainDate.from("2021-07-01"); // ISO 8601 calendar
console.log(date.monthCode); // "M07"
console.log(date.month); // 7

const date2 = Temporal.PlainDate.from("2021-05-01[u-ca=chinese]");
console.log(date2.monthCode); // "M03"
console.log(date2.month); // 3; it is March 20 in the Chinese calendar

const date3 = Temporal.PlainDate.from("2023-05-01[u-ca=chinese]");
console.log(date3.monthCode); // "M03"
console.log(date3.month); // 4, although it is also March (M03)!

const date4 = Temporal.PlainDate.from("2023-04-01[u-ca=chinese]");
console.log(date4.monthCode); // "M02L"
console.log(date4.month); // 3, this month is a leap month, i.e. a duplicate February

Изменение monthCode

const date = Temporal.PlainDate.from("2021-07-01");
const newDate = date.with({ month: 2 });
console.log(newDate.toString()); // 2021-02-01

Вы также можете использовать add() или subtract(), чтобы сдвинуть текущую дату на определенное количество месяцев.

const date = Temporal.PlainDate.from("2021-07-01");
const newDate = date.add({ months: 3 });
console.log(newDate.toString()); // 2021-10-01

По умолчанию with() ограничивает день диапазоном допустимых значений. Обе следующие операции установят месяц на последний месяц года:

const date = Temporal.PlainDate.from("2021-07-01");
const lastMonth = date.with({ month: date.monthsInYear }); // 2021-12-01
const lastMonth2 = date.with({ month: Number.MAX_VALUE }); // 2021-12-01

Форматирование названий месяцев

Не делайте так:

const names = [
  "January", "February", "March", "April", "May", "June",
  "July", "August", "September", "October", "November", "December",
];

const date = Temporal.PlainDate.from("2021-07-01");
console.log(names[date.month - 1]); // July

Также не делайте так:

const names = {
  "M01": "January", "M02": "February", "M03": "March", "M04": "April",
  "M05": "May", "M06": "June", "M07": "July", "M08": "August",
  "M09": "September", "M10": "October", "M11": "November", "M12": "December",
};

const date = Temporal.PlainDate.from("2021-07-01");
console.log(names[date.monthCode]); // July

Вместо этого всегда делайте так, что более удобно для пользователя, менее подвержено ошибкам и легко обобщается для других календарей:

const date = Temporal.PlainDate.from("2021-07-01");
console.log(
  date.toLocaleString("en-US", { calendar: date.calendarId, month: "long" }),
); // July

Спецификации

Спецификация
Temporal
# sec-get-temporal.plaindate.prototype.monthcode

Совместимость с браузерами

Десктопные Мобильные Серверные
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
monthCode
144
144
139
128
предварительная версия
144
139
95
Нет
Нет
144
Нет
1.4.0
2.7
26.0.0

См. также

  • Temporal.PlainDate
  • Temporal.PlainDate.prototype.with()
  • Temporal.PlainDate.prototype.add()
  • Temporal.PlainDate.prototype.subtract()
  • Temporal.PlainDate.prototype.year
  • Temporal.PlainDate.prototype.month
  • Temporal.PlainDate.prototype.daysInMonth
  • Temporal.PlainDate.prototype.monthsInYear

© 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/PlainDate/monthCode

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API