我正在尝试使用 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()的文档。
我正在尝试使用 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()的文档。
parseISO
的文档在这里。基本上,parseISO
试图解析包含ISO格式的日期字符串的字符串,例如'2019-09-25T14:34:32.999Z'
。
你要解析的是国际化字符串。即'Apr 9, 2020, 12:00:00 am'
是美国地区格式的日期字符串。
new Date()
之所以有效,是因为它依赖于您的环境(浏览器或节点)的语言环境,而您传递给它的字符串与您的语言环境的格式相匹配。如果您传递了法语语言环境格式的日期字符串,则很可能会失败。
要解析国际化字符串,你也可以查看parse
,它将接受传递的日期字符串的格式。
如果你通过网络(如HTTP REST API或数据库)传递日期,请已经决定传递/存储日期时间的格式。通常是ISO格式的日期字符串、自1970年以来UTC中的毫秒数或其他适合你的情况。然后根据你的“线路”或“存储”的规范,你将使用parseISO
或new Date(milliseconds)
。
如果你做的是基于浏览器的Web应用程序,则应考虑用户所在地区。然后解析可能变得繁琐,因为你必须考虑到你的用户的语言环境和/或时区。
Apr 9, 2020, 12:00:00 am
不符合 ISO 8601 格式,而这是 parseDate
所期望的格式。下面是一个正确的 ISO 8601 日期字符串示例:2020-11-20T10:36:01.516Z
。
请注意,MDN 强烈不建议使用 new Date(dateString)
或 Date.parse(dateString)
:
注意:由于浏览器之间存在差异和不一致性,强烈不建议使用
Date
构造函数(以及同样工作方式的Date.parse()
)解析日期字符串。
(来源)
初步观察:第四个大写字母M
应该是小写字母d
吧?
从MMM M, YYYY, hh:mm:ss aaaa
到MMM d, YYYY, hh:mm:ss aaaa
new Date()
可靠地处理符合ISO-8601标准的字符串(引用:“const birthday = new Date("1995-12-17T03:24:00"); // 这是符合ISO-8601标准的,将可靠地工作”)。parseISO仅接受符合ISO-8601标准的字符串,但我认为它们在内部使用new Date
或Date.format
。 - ArneHugo