在 ES6 之前,JavaScript 对日期的处理相对简单粗暴,只提供了 Date 对象来表示日期时间,同时也存在一些常见问题,例如时区转换、年月日时间序列化等。ES6 开始提供了更加完善的日期时间处理方式,但是在 ES12 中, JavaScript 进一步改进了对日期时间的支持。
ES6 中新增的日期时间处理方式
在 ES6 中新增了 Date.prototype.toISOString()
方法,可以输出 ISO 8601 格式的 string 类型时间,格式为 YYYY-MM-DDTHH:mm:ss.sssZ
。同时,也可以使用 Date 对象的其他方法获取年、月、日、时、分、秒等信息。例如:
-- -------------------- ---- ------- ----- ---- - --- ------- ----- ---- - ------------------- ----- ----- - --------------- - -- ----- --- - --------------- ----- ----- - ---------------- ----- ------- - ------------------ ----- ------- - ------------------ ----- --------- - ------------------- ---------------------------------------------------------------------------------- ---------------- ---- ------------------
输出结果如下:
年:2022,月:1,日:1,时:0,分:0,秒:0 ISO 8601 时间:2022-01-01T00:00:00.000Z
ES12 中新增的日期时间处理方式
在 ES12 中新增了一系列的日期时间处理方式,包括了更多的时区支持、更加灵活的日期计算方式和时区转换方式。
时区支持
在 ES12 中,新增了 Temporal
对象,用于提供更可靠、可读性更好的日期时间处理方式。Temporal
对象提供了 Instant
、TimeZone
和 ZonedDateTime
三种类型,其中 Instant
类型表示时刻,TimeZone
类型表示时区,ZonedDateTime
表示带有时区信息的日期时间。ZonedDateTime
继承了 Instant
类型的全部方法,在此基础上新增加了一些时区转换方法,例如 convertToTimeZone()
和 withZone()
方法。
-- -------------------- ---- ------- ----- - -------- --------- ------------- - - --------- -- -- ------- -- ----- ------- - ------------------------------------- -- -- -------- -- ----- -------- - ------------------------------- -- -- ------------- -- ----- ------------- - --- ---------------------- ---------- ------------------------------------------------------------- ------------------------------------------------------ ---------------- --------------------------------- ----------------------------------------------------------------------------------------
输出结果如下:
时间戳:1640985600 本地时间:2022/1/1 上午8:00:00 UTC 时间:2022-01-01T00:00:00Z 其他时区时间:2021-12-31T19:00:00-05:00[America/New_York]
日期计算
除了时区支持,ES12 还新增了一些日期计算的方法,用于增加、减少日期时间,相应的方法有 add()
和 subtract()
,这两个方法都接收一个以对象形式传入的时间段参数:
-- -------------------- ---- ------- ----- - --------- -------- - - --------- -- -- -------- ------- ----- ------------ - --- ---------- ------ - --- -- -- -------- -- --- -------- - ------------------------------------- -- ----- -------- - --------------------------- ------------------------------------------------ -- ----- -------- - -------------------------------- ------------------------------------------------
输出结果如下:
时间加上一小时后为:2022-01-01T01:00:00Z 时间减去一小时后为:2022-01-01T00:00:00Z
时区转换
在 ES12 中,时区转换更加方便,只需调用 ZonedDateTime
对象的 convertToTimeZone()
和 withZone()
方法即可实现。例如:
-- -------------------- ---- ------- -- -- ------------- -- ----- ------------- - --- --------------------------------------------------- -------------------------------- -- --- --- -- ----- ------- - ------------------------------------- ---------------- --- --------------------------- -- --------- ----- ----------- - ---------------------------------------------------- -------------------------------------------------
输出结果如下:
转换为 UTC 时间:2021-12-31T16:00:00Z 转换为纽约时间:2021-12-31T19:00:00-05:00[America/New_York]
总结
ES12 引入了更加完善的日期时间处理方式,提供了更多的时区支持、更加灵活的日期计算方式以及更方便的时区转换方式。这些特性不仅有助于解决常见的日期时间问题,同时也有助于开发者更加方便地书写复杂的日期时间处理程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a569aa48841e98941f3c4c