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-DD或MMDD)。请注意,实际存储的参考年份可能与您提供的年份不同,但表示的月日是相同的。有关更多信息,请参阅Temporal.PlainMonthDay.from()。 MM-
一个从
01到12的两位数。 DD-
一个从
01到31的两位数。YYYY、MM和DD部分可以用-分隔或不用。 [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对象,表示此月日,其中一些字段被新值替换。
示例
获取下一个节日的出现
// 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 |
浏览器兼容性
加载中…