Safari JS 无法解析 YYYY-MM-DD 日期格式?

最近在前端开发中,我遇到了一个奇怪的问题:Safari 浏览器无法正确解析 YYYY-MM-DD 格式的日期字符串。经过进一步研究,我发现这是因为 Safari 对于该日期格式的解析存在一些问题,而其他浏览器(比如 Chrome 和 Firefox)则没有这个问题。

问题描述

具体来说,当我尝试将一个 YYYY-MM-DD 格式的日期字符串传递给 JavaScript 的 Date() 构造函数时,在 Safari 中会得到一个 Invalid Date 的结果,而在其他浏览器中则能够正确解析。以下是一个示例代码:

----- ---------- - -------------
----- ---------- - --- -----------------

------------------------ -- - ------ --- ------- ---------------------

原因分析

在查找原因时,我发现 Safari 对于 Date() 构造函数的参数有一些特殊要求。按照 MDN web docs 上的说明,Date() 接受的字符串参数应该符合以下格式之一:

  1. 日期时间字符串(例如 "December 17, 1995 03:24:00"
  2. ISO 8601 格式的日期时间字符串(例如 "1995-12-17T03:24:00"
  3. 表述日期的字符串(例如 "December 17, 1995"

可以看到,这里并没有提到 YYYY-MM-DD 格式的日期字符串。因此,Safari 在解析该格式的字符串时会出现问题。

不过,我们可以通过将日期字符串拆分为年、月、日三个部分,然后分别传递给 Date() 构造函数来解决这个问题。以下是修改后的代码示例:

----- ---------- - -------------
----- ------ ------ ----- - ----------------------
----- ---------- - --- ---------- ----- - -- ------

------------------------ -- - ------ -----------------

总结

虽然这个问题可能只在某些特定场景下才会出现,但它仍然提醒我们在开发过程中要注意不同浏览器之间的差异性。同时,我们也应该尽可能遵循规范和最佳实践,避免使用不被支持的语法或格式。

最后,我希望本文能够对大家有所帮助。如果你还有其他关于前端开发的问题或疑惑,欢迎在评论区留言,我会尽力解答。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/26939