Javascript Chrome返回字符串“的有效日期”;2000财政年度“;而不是无效日期

Javascript Chrome返回字符串“的有效日期”;2000财政年度“;而不是无效日期,javascript,google-chrome,date,Javascript,Google Chrome,Date,Chrome返回字符串“FY 2000”的有效日期,而不是无效日期,而其他浏览器则正确返回“无效日期” 小提琴链接: 代码: function isDate(value) { return new Date(value).toString()!= "Invalid Date"); } 这是chrome浏览器的问题吗 编辑 问题是报告的行为仅在chrome浏览器中破坏了我们的产品。我检查了其他答案,但它们也不适用于chrome 我不认为这是一个错误。当您使用字符串作为参数调用Date构造

Chrome返回字符串“FY 2000”的有效日期,而不是无效日期,而其他浏览器则正确返回“无效日期”

小提琴链接:

代码:

function isDate(value)
{
    return new Date(value).toString()!= "Invalid Date");
}
这是chrome浏览器的问题吗

编辑
问题是报告的行为仅在chrome浏览器中破坏了我们的产品。我检查了其他答案,但它们也不适用于chrome

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

并说:

由于浏览器的差异和不一致性,强烈建议不要解析带有Date.parse的字符串

它还:

但是,根据浏览器和提供的值,未被ECMA-262定义为简化ISO格式的日期字符串中的无效值可能会或可能不会导致NaN,例如:

看起来当前的V8(Chrome)解析实现试图猜测传递了什么

供参考:

  • 关于crbug的相关问题:
  • V8 Date.parse实现:

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

简短回答:不要通过比较
日期
和字符串来检查无效日期。我在Edge(我目前的浏览器)上查看了你的代码片段,当调用的
new Date()
@Tim给定答案在Chrome中不起作用时,我得到了一个
Date
对象。你应该给我们一个可复制的代码示例,其他SO用户可以轻松在Chrome上运行。您当前的方法在任何浏览器AFAIK上都不理想,因此它在Chrome上不起作用是没有意义的。Chrome认为几乎可以接受任何东西,
“2525年”
也被解析为有效日期。@Kira这是重复的。自ECMAScript Ed.5以来,内置解析器只需解析标准中指定的格式(ISO 8601扩展版)。其他任何内容都完全依赖于实现,也就是说,实现可以按照自己的意愿解析字符串。在Ed.5之前,根本不需要解析任何特定的格式NaN@ManojPilania-Date.parse的结果将为NaN,其中字符串被确定为无效日期。如果将无效日期字符串(其中“无效”完全由解析器决定)与日期构造函数一起使用,则内部时间值将为NaN,date.prototype.toString将返回“无效日期”。对于“FY2017”、“a1”等字符串,crbug#126448似乎已部分修复。如果字符串和数字部分之间有空格,则认为有效date@RobG你是对的。