date-fns:parseISO(string) 和 new Date(string) 之间的区别?

Posted

技术标签:

【中文标题】date-fns:parseISO(string) 和 new Date(string) 之间的区别?【英文标题】:date-fns: Difference between parseISO(string) and new Date(string)? 【发布时间】:2019-11-12 07:03:36 【问题描述】:

我正在试用 date-fns v2。

我在运行时遇到了一些错误:

parseISO("Apr 9, 2020, 12:00:00 am");

parseISO("Apr 9, 2020, 12:00:00 am", "MMM M, YYYY, hh:mm:ss aaaa");

但这很好用:

new Date("Apr 9, 2020, 12:00:00 am");

我试图了解何时应该使用其中一种,但我找不到 parseISO() 的文档。

【问题讨论】:

【参考方案1】:

parseISOhere 的文档。基本上parseISO 尝试解析包含 ISO 格式日期字符串的字符串,例如'2019-09-25T14:34:32.999Z'

您要解析的是国际化字符串。 IE。 'Apr 9, 2020, 12:00:00 am' 是美国地区格式的日期字符串。

new Date() 之所以有效,是因为它依赖于您的环境(浏览器或节点)的语言环境,您传递给它的字符串与您的语言环境的格式相匹配。如果您将传递法语区域设置格式的日期字符串,则很可能会失败。

要解析国际化字符串,您还可以查看parse,它也将采用传递日期字符串的格式。

如果您通过网络(如 HTTP REST API 或数据库)传递日期,您应该已经决定了传递/存储日期时间的格式。通常它是 ISO 格式的日期字符串、自 1970 年以来 UTC 的毫秒数或任何其他适合您的情况。然后根据你的“电线”或“商店”的规格,你会做parseISOnew Date(milliseconds)

如果你做一些基于浏览器的网络应用程序,你应该考虑你的用户的本地。然后解析可能会变得很麻烦,因为您需要处理用户的语言环境和/或时区。

【讨论】:

【参考方案2】:

Apr 9, 2020, 12:00:00 amparseDate 预期的 ISO 8601 format 不匹配。这是正确 ISO 8601 日期字符串的示例:2020-11-20T10:36:01.516Z

请注意,MDN 强烈反对使用new Date(dateString)Date.parse(dateString)

注意:由于浏览器的差异和不一致,强烈建议不要使用 Date 构造函数(和 Date.parse(),其工作方式相同)解析日期字符串 .

(source)

【讨论】:

【参考方案3】:

随意观察:第 4 个国会大厦 M 不应该是小写字母 d 吗? 从MMM M, YYYY, hh:mm:ss aaaaMMM d, YYYY, hh:mm:ss aaaa

【讨论】:

以上是关于date-fns:parseISO(string) 和 new Date(string) 之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章

使用 date-fns 进行德语日期验证

使用 date-fns 格式化持续时间(从 seconds 开始)

TypeError:格式不是 date-fns 中的函数

如何在 VueJS 中使用 Date-FNS?

如何使用 date-fns 格式化日期?

如何使用 date-fns 找到一周中最近的一天