Javascript 如何检查以数字结尾的字符串不是日期?

Javascript 如何检查以数字结尾的字符串不是日期?,javascript,parsing,date,Javascript,Parsing,Date,当我想在Javascript中检查字符串是否为日期时,我通常会执行以下操作: !isNaN(Date.parse(myString)); 但我刚刚发现 isNaN(Date.parse("smth")) === true isNaN(Date.parse("smth_1")) === true isNaN(Date.parse("1 smth")) === true isNaN(Date.parse("smth 1")) === false // !! 看 所以我的问题是:为什么任何以数字结

当我想在Javascript中检查字符串是否为日期时,我通常会执行以下操作:

!isNaN(Date.parse(myString));
但我刚刚发现

isNaN(Date.parse("smth")) === true
isNaN(Date.parse("smth_1")) === true
isNaN(Date.parse("1 smth")) === true
isNaN(Date.parse("smth 1")) === false // !!


所以我的问题是:为什么任何以数字结尾的字符串(前面有空格)解析为有效日期(显然不是),以及如何可靠地检查它是否是有效日期?

根据Mozilla开发者网络:

ECMAScript规范声明:如果字符串不符合标准格式,函数可能会退回到任何特定于实现的启发式或特定于实现的解析算法。ISO格式字符串中不可识别的字符串或包含非法元素值的日期将导致Date.parse()返回NaN


因此,这是一个特定于实现的解析案例。

根据Mozilla开发者网络:

ECMAScript规范声明:如果字符串不符合标准格式,函数可能会退回到任何特定于实现的启发式或特定于实现的解析算法。ISO格式字符串中不可识别的字符串或包含非法元素值的日期将导致Date.parse()返回NaN


因此,这是一个特定于实现的解析案例。

根据Mozilla开发者网络:

ECMAScript规范声明:如果字符串不符合标准格式,函数可能会退回到任何特定于实现的启发式或特定于实现的解析算法。ISO格式字符串中不可识别的字符串或包含非法元素值的日期将导致Date.parse()返回NaN


因此,这是一个特定于实现的解析案例。

根据Mozilla开发者网络:

ECMAScript规范声明:如果字符串不符合标准格式,函数可能会退回到任何特定于实现的启发式或特定于实现的解析算法。ISO格式字符串中不可识别的字符串或包含非法元素值的日期将导致Date.parse()返回NaN

因此,这是一个特定于实现的解析案例。

已知的Chrome问题:

该规范实际上说,日期解析依赖于实现,当遇到未知格式时,实现可能会做出最佳猜测。这就是V8的功能。我们可以更严格,拒绝更多字符串,但优先级很低

已知的Chrome问题:

该规范实际上说,日期解析依赖于实现,当遇到未知格式时,实现可能会做出最佳猜测。这就是V8的功能。我们可以更严格,拒绝更多字符串,但优先级很低

已知的Chrome问题:

该规范实际上说,日期解析依赖于实现,当遇到未知格式时,实现可能会做出最佳猜测。这就是V8的功能。我们可以更严格,拒绝更多字符串,但优先级很低

已知的Chrome问题:

该规范实际上说,日期解析依赖于实现,当遇到未知格式时,实现可能会做出最佳猜测。这就是V8的功能。我们可以更严格,拒绝更多字符串,但优先级很低


您使用的浏览器是什么?Firefox没有这个问题,但Opera有。这是因为传入的任何字符串都将被解析为数字,而您的示例实际上与
新日期(“1”)
相同。要查看javascript如何使用
ToNumber
,请查看要解析的格式的标准化,并进行检查。例如,检查以确保您的字符串是全部numbers@Exelian是Chrome(你说得对)你在用什么浏览器?Firefox没有这个问题,但Opera有。这是因为传入的任何字符串都将被解析为数字,而您的示例实际上与
新日期(“1”)
相同。要查看javascript如何使用
ToNumber
,请查看要解析的格式的标准化,并进行检查。例如,检查以确保您的字符串是全部numbers@Exelian是Chrome(你说得对)你在用什么浏览器?Firefox没有这个问题,但Opera有。这是因为传入的任何字符串都将被解析为数字,而您的示例实际上与
新日期(“1”)
相同。要查看javascript如何使用
ToNumber
,请查看要解析的格式的标准化,并进行检查。例如,检查以确保您的字符串是全部numbers@Exelian是Chrome(你说得对)你在用什么浏览器?Firefox没有这个问题,但Opera有。这是因为传入的任何字符串都将被解析为数字,而您的示例实际上与
新日期(“1”)
相同。要查看javascript如何使用
ToNumber
,请查看要解析的格式的标准化,并进行检查。例如,检查以确保您的字符串是全部numbers@Exelian这是Chrome(mplungjan,你说得对)