铬返回有效日期字符串“风云2000”,而不是无效的日期

问题描述:

铬返回有效日期字符串“风云2000”,而不是无效的日期,而其他浏览器都正确地返回“无效的日期”铬返回有效日期字符串“风云2000”,而不是无效的日期

小提琴链接:https://jsfiddle.net/Lddr79ek/

代码:

function isDate(value) 
{ 
    return new Date(value).toString()!= "Invalid Date"); 
} 

这是Chrome浏览器的问题?

编辑 问题是报告的行为仅在Chrome浏览器中打破了我们的产品。我在SO中查看了其他答案,但他们也没有在Chrome中工作。

+0

简短的回答:不要通过比较'Date'为字符串检查一个无效的日期。我检查了Edge上的代码片段(目前我的当前浏览器),并在调用'new Date()'时返回了Date对象。 –

+0

@Tim给出的答案不适用于Chrome – Kira

+0

然后,您应该给我们一个_reproducible_示例代码,该代码可以由另一个SO用户在Chrome上轻松运行。您目前的方法在任何浏览器AFAIK上都不理想,因此它无法在Chrome上运行,这是一个有争议的问题。 –

我不认为这是一个错误。当您使用字符串作为参数调用Date构造函数时,该字符串通过Date.parse解析。

而且MDN说:

解析字符串与Date.parse强烈劝阻由于浏览器的差异和矛盾。

它还says

然而,由ECMA-262所定义的可能或可能不导致NaN时,根据浏览器和值不被识别为简化ISO格式中的日期字符串无效值提供,例如:

它看起来像当前的V8(Chrome)解析实现尝试猜测,通过了什么。

FYI:

+0

日期永远不会结果为NaN –

+1

@ManojPilania * Date.parse *的结果将是NaN,其中字符串被确定为无效日期。如果Date构造函数使用无效的日期字符串(其中“invalid”完全取决于解析器),则内部时间值将为NaN,并且* Date.prototype.toString *将返回“Invalid date”。 – RobG

+0

它看起来像crbug#126448部分固定为“FY2017”,“a1”等字符串。如果字符串和数字部分之间有空格,那么它认为是有效日期 – Kira

Chrome的分析只能在输入字符串的数字。

例子:

new Date('AS 2017') //Year part is parsed. 
Sun Jan 01 2017 00:00:00 GMT+0300 

new Date('XCNCNNC 2017') //Year part is parsed. 
Sun Jan 01 2017 00:00:00 GMT+0300 

new Date('FY2017') //without space. Year is not parsed. 
Invalid Date