Temporal.PlainDate.prototype.monthCode

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

实验性: 这是一项实验性技术
在生产中使用此技术之前,请仔细检查浏览器兼容性表格

Temporal.PlainDate 实例的 **monthCode** 访问器属性会返回一个特定于日历的字符串,表示此日期的月份。它 取决于日历

通常它是 M 加上两位数的月份数字。对于闰月,它是前一个月份代码后跟 L(即使它在概念上是后一个月份的派生;例如,在希伯来日历中,Adar I 的代码是 M05L,但 Adar II 的代码是 M06)。如果闰月是该年的第一个月,则代码为 M00L

注意: 不要假设 monthCode 是用户友好的字符串;请使用 toLocaleString() 来格式化您的日期。通常,不要将月份名称缓存到数组或对象中。即使 monthCode 通常在一个日历内映射到月份名称,我们也建议始终使用例如 date.toLocaleString("en-US", { calendar: date.calendarId, month: "long" }) 来计算月份名称。

monthCode 的设置访问器是 undefined。您无法直接更改此属性。请使用 with() 方法创建一个新的 Temporal.PlainDate 对象,并包含所需的旧值。

示例

使用 monthCode

js
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

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

您也可以使用 add()subtract() 从当前日期开始移动一定数量的月份。

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

默认情况下,with() 会将日期约束在有效值的范围内。以下两者都会将月份设置为该年的最后一个月

js
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

格式化月份名称

不要这样做

js
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

也不要这样做

js
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

相反,请始终这样做,这样更用户友好,不易出错,并且可以轻松地推广到其他日历

js
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

浏览器兼容性

另见