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

浏览器兼容性

另见