我正在开发一个需要处理大量“日期”的项目。我注意到有时javascript在不同的浏览器中表现不同:
代码:
new Date("Mar 30, 2017".replace(',', '').replace(/ /g, '/'))
我知道我不需要使用replace
来创建日期,但是此代码为我提供了有趣的Chrome和Safari结果。
我跑的时候:
"Mar 30, 2017".replace(',', '').replace(/ /g, '/')
Chrome和Safari都会给我:"Mar/30/2017"
。但是当我尝试将结果转换为Date
对象时,有趣的结果将是:
Chrome: Thu Mar 30 2017 00:00:00 GMT-0700 (PDT)
Firefox: Date 2017-03-30T07:00:00.000Z
Safari: Invalid Date
我已经检查了两种浏览器的Javascript版本,并且它们使用相同的版本(1.7)。任何人都可以解释为什么Chrome在这方面的行为与Safari不同吗?
更新
我知道"Mar/30/2017"
不是有效的日期格式。但我的问题是为什么javascript在不同的浏览器中表现不同。对于那些抱怨我的日期格式的答案。请在回答之前阅读问题。我将采取@Felix Kling的回答,并感谢所有答案。
答案 0 :(得分:1)
有人可以解释为什么Chrome在这方面的行为与Safari不同吗?
specification表示处理未知日期格式取决于实现:
[...]字符串可以解释为本地时间,UTC时间或某个其他时区的时间,具体取决于字符串的内容。该函数首先尝试根据日期时间字符串格式(20.3.1.16)中调出的规则(包括延长年份)来解析String的格式。如果String不符合该格式,则该函数可以回退到任何特定于实现的启发式或特定于实现的日期格式。 [...]
Safari和Chrome使用不同的JavaScript引擎,因此在这种情况下,他们的行为可能(并且确实)不同。