JavaScript中有效的日期时间字符串是什么?

时间:2018-08-06 20:33:56

标签: javascript string date datetime time

在JavaScript中使用new DateDate.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?)。

1 个答案:

答案 0 :(得分:1)

  

那我应该使用哪种日期时间格式?

通常的建议是完全不使用内置解析器,因为它不可靠,因此对“应该”的回答为“无”。参见Why does Date.parse give incorrect results?

但是,正如str所说,您可能可以将ECMA-262中指定的格式与时区一起使用:YYYY-MM-DDTHH:mm:ss.sssZYYYY-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是一个简单的解析器和格式化程序,具有编写清晰,易于理解的代码)。

解析器并不难编写,但是试图猜测输入格式(内置解析器往往会这样做)充满了烦恼,不可靠并且在实现之间不一致。因此,除非输入字符串使用解析器的默认格式,否则解析器应要求提供格式。

PS

在ECMAScript 2019(目前在草稿中)中,实现必须支持解析和格式化的字符串格式有所变化,但我认为避免内置解析器的一般建议尚需时日。

>