首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我可以解析无效的日期字符串?

为什么我可以解析无效的日期字符串?
EN

Stack Overflow用户
提问于 2019-10-29 15:34:07
回答 2查看 254关注 0票数 4

在我的应用程序中,我使用一个函数来检查输入的值是否是用于特定目的的有效文本。

有效值是一个字符串,在该字符串中,它不是有效日期或数字,也不是真或假。

代码语言:javascript
复制
checkText(str) {
    return isNaN(str) && isNaN(Date.parse(str)) && ['true', 'false'].indexOf(str) == -1;
} 

它正常工作,但我遇到了一个问题:“新项目3”。

Date.parse("New Item 3")返回一个数字,但是为什么!!?此外,如果您将3改为任何小于13的数字,它将返回号码!

这里有人能向我解释一下发生了什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-29 15:46:40

实际上,这里的问题来自于方法,如果您检查:

代码语言:javascript
复制
Date.parse("New Item 3");

它将返回:

代码语言:javascript
复制
983401200000

代码语言:javascript
复制
console.log(Date.parse("New Item 3"));

因此,这里的事实是,Date.parse()将按照浏览器规范运行,可能返回或不返回Number它依赖于浏览器

你可以从MDN参考中看到:

ECMAScript规范规定:如果字符串不符合标准格式,则函数可能返回到任何特定于实现的启发式算法或特定于实现的解析算法。在ISO格式化字符串中包含非法元素值的不可识别字符串或日期将导致Date.parse()返回NaN。 但是,根据浏览器和所提供的值,日期字符串中不被识别为由ECMA-262定义的简化ISO格式中的无效值可能会也可能不会导致NaN。

票数 4
EN

Stack Overflow用户

发布于 2019-10-29 15:39:18

经验教训:Date.parse不是日期验证器。

偶MDN 他说

不建议使用Date.parse,直到ES5,字符串解析完全依赖于实现。不同的主机解析日期字符串的方式仍然存在许多差异,因此应该手动解析日期字符串(如果要容纳许多不同的格式,库可以提供帮助)。

再往下走

ECMAScript规范规定:如果字符串不符合标准格式,则函数可能返回到任何特定于实现的启发式算法或特定于实现的解析算法。在ISO格式化字符串中包含非法元素值的不可识别字符串或日期将导致Date.parse()返回NaN。 但是,根据浏览器和所提供的值,日期字符串中的无效值不被识别为ECMA-262定义的简化ISO格式,可能会也可能不会导致NaN。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58610667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档