Javascript Chrome返回字符串“的有效日期”;2000财政年度“;而不是无效日期
Chrome返回字符串“FY 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构造
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实现:
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你是对的。