在JavaScript中使用new Date
或Date.parse
时,我不能只传递任意日期格式。根据格式的不同,我得到的日期可能会不同,甚至会得到Invalid Date
而不是日期对象。某些日期格式只能在一种浏览器中使用,而不能在其他浏览器中使用。那么我应该使用哪种日期时间格式?
其他问题:
所有浏览器都支持相同格式吗? Mozilla Firefox,Google Chrome,Microsoft Internet Explorer,Microsoft Edge和Apple Safari如何处理日期时间字符串?那么Node.js呢?
是否考虑本地日期格式?例如。如果我居住在瑞士且日期格式为30.07.2018,我可以使用new Date('30.07.2018')
吗?
是否考虑了当地时区?
如何从日期对象获取日期时间字符串?
如何检测无效的日期时间字符串?
像Moment.js这样的日期库如何处理日期字符串?
如果您没有注意到,我会回答我自己的问题(why?)。
答案 0 :(得分:1)
那我应该使用哪种日期时间格式?
通常的建议是完全不使用内置解析器,因为它不可靠,因此对“应该”的回答为“无”。参见Why does Date.parse give incorrect results?
但是,正如str所说,您可能可以将ECMA-262中指定的格式与时区一起使用:YYYY-MM-DDTHH:mm:ss.sssZ
或YYYY-MM-DDTHH:mm:ss.sss±HH:mm
,不要相信任何其他格式。
所有浏览器都支持相同格式吗?
否。
Mozilla Firefox,Google Chrome,Microsoft Internet Explorer,Microsoft Edge和Apple Safari如何处理日期时间字符串?
不同。 ECMA-262中的格式以外的任何其他内容都取决于实现,并且在解析ECMA-262格式时存在错误。
Node.js呢?
再次有所不同,请参见上文。
是否考虑本地日期格式?例如。如果我居住在瑞士且日期格式为30.07.2018,可以使用新的Date('30 .07.2018')吗?
也许。由于它不是标准格式,因此解析取决于实现,所以也许不是。
是否考虑了当地时区?
它使用主机时区偏移量(其中将字符串解析为本地)并生成使用本地时间显示的字符串。否则,它将使用UTC(内部时间值为UTC)。
如何从日期对象获取日期时间字符串?
Date.parse.toString,或查看Where can I find documentation on formatting a date in JavaScript?
如何检测无效的日期时间字符串?
here的前三个答案之一应该回答这个问题。
像Moment.js这样的日期库如何处理日期字符串?
它们基于默认格式或提供的格式来解析它们。阅读源代码(例如fecha.js是一个简单的解析器和格式化程序,具有编写清晰,易于理解的代码)。
解析器并不难编写,但是试图猜测输入格式(内置解析器往往会这样做)充满了烦恼,不可靠并且在实现之间不一致。因此,除非输入字符串使用解析器的默认格式,否则解析器应要求提供格式。
在ECMAScript 2019(目前在草稿中)中,实现必须支持解析和格式化的字符串格式有所变化,但我认为避免内置解析器的一般建议尚需时日。
>