首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Chrome V8 JavaScript引擎会将TG-1到TG-12识别为有效的日期/时间?

为什么Chrome V8 JavaScript引擎会将TG-1到TG-12识别为有效的日期/时间?
EN

Stack Overflow用户
提问于 2019-05-09 00:04:58
回答 1查看 93关注 0票数 5

我实现了一个CSV解析器来猜测每一列的类型格式,但是我发现JavaScript Date类认为"TG-1“是一个有效的日期/时间。

这是不是一些我以前没见过的Chrome支持的晦涩的日期格式?我不认为这是一个有效的日期,看着不同的日期ISO标准,我没有看到一个参考。

Chrome74说它是有效的。

火狐64说它是无效的。

代码语言:javascript
复制
let validDate = true;
try{
   d = new Date("TG-1");
   d.toISOString()
}catch(e){
   validDate = false
}
console.log(validDate);

任何后跟-和数字1-12的字符串都被认为是有效的:

代码语言:javascript
复制
d = new Date("adsfadgag-12")//valid per V8
EN

回答 1

Stack Overflow用户

发布于 2019-05-09 00:26:15

引用V8 sourcecode的话

旧版日期:

忽略第一个数字之前的任何无法识别的单词。

忽略带括号的文本。

后跟':‘的无符号数字是一个时间值,并被添加到TimeComposer中。后面跟'::‘的数字也会加上第二个零。后跟'.‘的数字也是一个时间,后面必须跟毫秒。

任何其他数字都是date组件,并添加到DayComposer中。月份名称(或者实际上:任何具有与月份名称相同的前三个字母的单词)被记录为Day composer中的命名月份。可识别为时区的单词被记录为时区,(+|-)(hhmm|hh:)也是如此。

传统日期不允许在读取数字之后使用额外的符号('+‘或'-')或umatched ')’(在第一个数字之前,允许任何垃圾)。

两者的交集:匹配两种格式的字符串(例如1970-01-01)将被解析为ES5日期-时间字符串-这意味着它将默认为协调世界时时区。如果遵循ES5规范,这是不可避免的。

在扫描ES5 datetime字符串时读取有效的"T“后,输入不再是有效的旧日期,因为"T”是读取数字后的垃圾字符串。

换句话说:这种行为并不是真正计划好的,只是一些浏览器有时会这样,因此这种奇怪的行为必须保留下来。Date(...)将尝试解析几乎任何东西,而不会有任何抱怨。

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

https://stackoverflow.com/questions/56044829

复制
相关文章

相似问题

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