关于javascript:Chrome返回字符串“FY 2000”的有效日期,而不是无效日期

Chrome returns valid date for string “FY 2000” instead of invalid date

本问题已经有最佳答案,请猛点这里访问。

chrome返回字符串"fy 2000"的有效日期而不是无效日期,而其他浏览器则正确返回"无效日期"

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

代码:

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

这是Chrome浏览器的问题吗?

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


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

例子:

1
2
3
4
5
6
7
8
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构造函数时,该字符串通过Date.parse解析。

而MDN说:

Parsing of strings with Date.parse is strongly discouraged due to browser differences and inconsistencies.

它还说:

However, invalid values in date strings not recognized as simplified ISO format as defined by ECMA-262 may or may not result in NaN, depending on the browser and values provided, e.g.:

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

FY:

  • CRbug相关问题:126448
  • V8 date.parse实现:dateparser inl.h