铬返回有效日期字符串“风云2000”,而不是无效的日期
问题描述:
铬返回有效日期字符串“风云2000”,而不是无效的日期,而其他浏览器都正确地返回“无效的日期”铬返回有效日期字符串“风云2000”,而不是无效的日期
小提琴链接:https://jsfiddle.net/Lddr79ek/
代码:
function isDate(value)
{
return new Date(value).toString()!= "Invalid Date");
}
这是Chrome浏览器的问题?
编辑 问题是报告的行为仅在Chrome浏览器中打破了我们的产品。我在SO中查看了其他答案,但他们也没有在Chrome中工作。
答
我不认为这是一个错误。当您使用字符串作为参数调用Date
构造函数时,该字符串通过Date.parse
解析。
而且MDN说:
解析字符串与Date.parse强烈劝阻由于浏览器的差异和矛盾。
它还says:
然而,由ECMA-262所定义的可能或可能不导致NaN时,根据浏览器和值不被识别为简化ISO格式中的日期字符串无效值提供,例如:
它看起来像当前的V8(Chrome)解析实现尝试猜测,通过了什么。
FYI:
- 上crbug相关的问题:#126448
- V8 Date.parse实现:dateparser-inl.h
答
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
简短的回答:不要通过比较'Date'为字符串检查一个无效的日期。我检查了Edge上的代码片段(目前我的当前浏览器),并在调用'new Date()'时返回了Date对象。 –
@Tim给出的答案不适用于Chrome – Kira
然后,您应该给我们一个_reproducible_示例代码,该代码可以由另一个SO用户在Chrome上轻松运行。您目前的方法在任何浏览器AFAIK上都不理想,因此它无法在Chrome上运行,这是一个有争议的问题。 –