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

How to check that a string ending with a number is NOT a date?

本文关键字:结尾 字符串 是不是 日期 数字 何检查 检查      更新时间:2023-09-26

当我想检查字符串是否是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 // !!

看这提琴

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

已知Chrome问题:

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

https://code.google.com/p/chromium/issues/detail?id=124398https://code.google.com/p/chromium/issues/detail?id=126448

日期问题。解析Chrome

根据Mozilla开发者网络:

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

所以这是一个实现特定解析的情况