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 |
浏览器兼容性
加载中…