在JavaScript中,用于解析特定字符串的正确'时态'类型是什么?



ECMAScript的新Temporal提案(最终!)定义了一个用于在JS中处理日期和时间的现代API,包括时区安全算法和非公历日历。

我知道我可以使用ISO 8601或RFC 3339字符串与Temporal。如果我有字符串数据,我想解析成JS日期/时间对象,我应该使用哪种时态类型?

要确定应该用于解析字符串的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"

注意,像'12/25/2022'这样的本地化字符串格式不能被时态解析。只有明确的、计算机可读的格式才能被Temporal解析,比如'2022-25-12'

相关内容

  • 没有找到相关文章

最新更新