Temporal
提案定义(最终!)一个用于在 JS 中处理日期和时间的现代 API,包括时区安全算术和非公历。
我知道我可以将 ISO 8601 或 RFC 3339 字符串与
Temporal
一起使用。如果我有字符串数据想要解析为 JS 日期/时间对象,我应该使用哪种 Temporal 类型?
要确定用于解析字符串的
Temporal
类,选择其数据模型与字符串中的数据相匹配的类型非常重要。
Temporal.Instant
代表准确的时间。
其数据模型是自 1970 年 1 月 1 日 UTC 以来的整数纳秒数。
这种类型不知道时区,并且不提供访问日历/时钟单位(如月或小时)的方法。这只是一个时间戳。Temporal.ZonedDateTime
表示从特定时区角度来看的准确时间。
它的数据模型是时间戳(如Temporal.Instant
)、时区(通常是 IANA 区域)和日历。
需要时区是因为此 Temporal
类型(且仅此类型)允许 DST 安全地创建派生值。
当您向 Temporal.ZonedDateTime
实例添加 1 天时,确切时间通常是 24 小时后,但如果添加跨越 DST 转换,则可能是 23 或 25 小时。Temporal.PlainDate
表示无时区日期:没有时间且不参考时区的本地日期。
它的数据模型是年/月/日和日历。Temporal.PlainMonthDay
代表生日、周年纪念日或其他重复事件。
它的数据模型是月、日、日历。Temporal.PlainYearMonth
代表特定年份中的一个月,例如2022 年 1 月。
它的数据模型是年、月、历。Temporal.PlainTime
表示一天中无时区的时间:不参考日期、时区或日历的本地时间。
其数据模型为小时/分钟/秒,秒分辨率低至 9 位小数(纳秒)。Temporal.PlainDateTime
表示本地日期和时间,不涉及时区。
其数据模型为年/月/日/时/分/秒和日历。
这种类型很少使用,因为上面的类型涵盖了大多数用例。
如果您只关心确切的时间戳而不关心时区,那么请使用 Temporal.Instant
。
如果您只关心本地日期,请使用 Temporal.PlainDate
。
如果您关心确切的时间和时区,请使用 Temporal.ZonedDateTime
。
除了 Temporal.PlainDateTime
文档中详细介绍的少数用例之外,大多数时候最好使用不同的类型。Temporal.Duration
代表一段时间。
它的数据模型是若干年、月、日、时、分、秒、毫秒、微秒和纳秒。Temporal.TimeZone
表示 IANA 时区(如 Asia/Tokyo
)或(很少)偏移时区(如 +06:00
)。
它的数据模型是时区的规范ID,例如"Asia/Tokyo"
或 "+06:00"
。Temporal.Calendar
表示日历,如希伯来语、中文或默认的 ISO 8601 日历。
它的数据模型是日历的ID,例如"iso8601"
或 "hebrew"
。请注意,Temporal 无法解析诸如
'12/25/2022'
和 '25/12/2022'
之类的本地化字符串格式。 Temporal 只能解析明确的计算机可读格式,例如 '2022-12-25'
。