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

瀏覽器相容性

另見