Temporal.PlainMonthDay

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

實驗性: 這是一項實驗性技術
在生產中使用此技術之前,請仔細檢查瀏覽器相容性表格

Temporal.PlainMonthDay 物件表示日曆日期的月份和日期,不包含年份或時區;例如,日曆上每年重複發生並持續一整天的事件。它在根本上表示為 ISO 8601 日曆日期,包含年、月、日欄位,以及關聯的日曆系統。在非 ISO 日曆系統中,年份用於區分月日。

描述

PlainMonthDay 本質上是 Temporal.PlainDate 物件的月日部分,不包含年份。由於月日的含義可能因年份而異(例如,它是否存在,或者第二天的月日是什麼),因此此物件本身不提供太多功能,例如比較、加法或減法。它甚至沒有 month 屬性,因為沒有年份,月份索引沒有意義(例如,在閏月的情況下,兩年中具有相同索引的兩個月份可能具有不同的名稱)。

RFC 9557 格式

PlainMonthDay 物件可以使用 RFC 9557 格式進行序列化和解析,該格式是 ISO 8601 / RFC 3339 格式的擴充套件。字串具有以下形式(空格僅用於可讀性,不應出現在實際字串中)

YYYY-MM-DD [u-ca=calendar_id]
YYYY 可選

四位數,或帶 +- 符號的六位數。對於非 ISO 日曆是必需的,否則是可選的。如果省略,您可以將 YYYY- 替換為 --(這樣字串看起來像 --MM-DD--MMDD),或者完全省略 YYYY- 部分(這樣字串看起來像 MM-DDMMDD)。請注意,實際儲存的參考年份可能與您提供的年份不同,但表示的月日是相同的。有關更多資訊,請參閱 Temporal.PlainMonthDay.from()

MM

一個從 0112 的兩位數。

DD

一個從 0131 的兩位數。YYYYMMDD 部分可以用 - 分隔或不用。

[u-ca=calendar_id] 可選

calendar_id 替換為要使用的日曆。有關常用支援的日曆型別列表,請參閱 Intl.supportedValuesOf()。預設為 [u-ca=iso8601]。可以透過在鍵前加 ! 來新增關鍵標誌:例如 [!u-ca=iso8601]。這個標誌通常告訴其他系統,如果它們不支援它,就不能忽略它。如果註解包含兩個或多個日曆註解且其中一個是關鍵的,Temporal 解析器將丟擲錯誤。請注意,YYYY-MM-DD 始終被解釋為 ISO 8601 日曆日期,然後轉換為指定的日曆。

作為輸入,你可以選擇性地包含時間、偏移量和時區識別符號,格式與 PlainDateTime 相同,但它們將被忽略。[key=value] 格式的其他註解也將被忽略,且它們不得帶有關鍵標誌。

序列化時,你可以配置是否顯示日曆 ID,以及是否為其新增關鍵標誌。

建構函式

Temporal.PlainMonthDay() 實驗性

透過直接提供底層資料來建立一個新的 Temporal.PlainMonthDay 物件。

靜態方法

Temporal.PlainMonthDay.from() 實驗性

從另一個 Temporal.PlainMonthDay 物件、具有月份和日期屬性的物件或 RFC 9557 字串建立一個新的 Temporal.PlainMonthDay 物件。

例項屬性

這些屬性在 Temporal.PlainMonthDay.prototype 上定義,並由所有 Temporal.PlainMonthDay 例項共享。

Temporal.PlainMonthDay.prototype.calendarId 實驗性

返回一個字串,表示用於解釋內部 ISO 8601 日期的日曆

Temporal.PlainMonthDay.prototype.constructor

建立例項物件的建構函式。對於 Temporal.PlainMonthDay 例項,初始值是 Temporal.PlainMonthDay() 建構函式。

Temporal.PlainMonthDay.prototype.day 實驗性

返回一個正整數,表示此日期在本月中的基於 1 的日期索引,這與你在日曆上看到的日期數字相同。依賴於日曆。通常從 1 開始並且是連續的,但並非總是如此。

Temporal.PlainMonthDay.prototype.monthCode 實驗性

返回一個日曆特定的字串,表示此日期的月份。依賴於日曆。通常是 M 加上一個兩位數的月份編號。對於閏月,它是上一個月的程式碼後跟 L。如果閏月是一年中的第一個月,程式碼是 M00L

Temporal.PlainMonthDay.prototype[Symbol.toStringTag]

[Symbol.toStringTag] 屬性的初始值是字串 "Temporal.PlainMonthDay"。此屬性在 Object.prototype.toString() 中使用。

例項方法

Temporal.PlainMonthDay.prototype.equals() 實驗性

如果此月日的值與另一個月日(可以由 Temporal.PlainMonthDay.from() 轉換的形式)等效,則返回 true,否則返回 false。它們透過日期值和日曆進行比較。

Temporal.PlainMonthDay.prototype.toJSON() 實驗性

返回一個字串,以與呼叫 toString() 相同的 RFC 9557 格式表示此月日。旨在由 JSON.stringify() 隱式呼叫。

Temporal.PlainMonthDay.prototype.toLocaleString() 實驗性

返回一個字串,以語言敏感的方式表示此月日。

Temporal.PlainMonthDay.prototype.toPlainDate() 實驗性

返回一個新的 Temporal.PlainDate 物件,表示此月日和在同一日曆系統中提供的年份。

Temporal.PlainMonthDay.prototype.toString() 實驗性

返回一個字串,以 RFC 9557 格式表示此月日。

Temporal.PlainMonthDay.prototype.valueOf() 實驗性

丟擲 TypeError,這會阻止 Temporal.PlainMonthDay 例項在算術或比較操作中 隱式轉換為原始值

Temporal.PlainMonthDay.prototype.with() 實驗性

返回一個新的 Temporal.PlainMonthDay 物件,表示此月日,其中一些欄位被新值替換。

示例

獲取下一個節日的出現

js
// Chinese New Years are on 1/1 in the Chinese calendar
const chineseNewYear = Temporal.PlainMonthDay.from({
  monthCode: "M01",
  day: 1,
  calendar: "chinese",
});
const currentYear = Temporal.Now.plainDateISO().withCalendar("chinese").year;
let nextCNY = chineseNewYear.toPlainDate({ year: currentYear });
if (Temporal.PlainDate.compare(nextCNY, Temporal.Now.plainDateISO()) <= 0) {
  nextCNY = nextCNY.add({ years: 1 });
}
console.log(
  `The next Chinese New Year is on ${nextCNY.withCalendar("iso8601").toLocaleString()}`,
);

規範

規範
Temporal
# sec-temporal-plainmonthday-objects

瀏覽器相容性

另見