Javascript Date 接受非数字年份 "aaaa-05-04"作为有效日期

标签 javascript date

<分区>

为什么 Javascript Date 接受非数字字符作为年份并将其作为 2001 返回?

如果您运行以下命令:

new Date('aaaa-05-04');

结果为 Fri May 04 2001 00:00:00 GMT+0200aaaa 年份不应该导致 Invalid Date 吗?通过将年份设置为 babc 或任何其他组合,您会得到相同的结果。

同时将月份设置为非数字可提供有效日期

new Date('aaaa-aa-01');

但如果日期设置为 21 则不是:

new Date('aaaa-aa-21');

奖励问题:

new Date(1950, 30, 30);

结果 Wed Jul 30 1952 00:00:00 GMT+0100

这不应该也导致 Invalid Date 吗?相反,它增加了年份。

我目前使用的是 Chrome 91。

最佳答案

不建议使用 Date 解析机制,因为它是 highly implementation dependent ,例如 while new Date('aaaa-05-04'); 将按照您在 chrome 中描述的那样工作,它会在 firefox 中生成无效的日期实例 - 在 es5 之前事情更加疯狂。

The standard specifies如果格式与标准格式 (a simplification of ISO 8601) 不匹配,则实现可能会根据实现的特定细节进行解析。

日期解析机制无法修复,这就是 tc39 致力于 Temporal 的原因,关于用于解析和操作日期的新接口(interface)的提案。

最终,当传递的格式不符合标准格式时,判断 Date.parse 将如何工作的唯一方法是检查实现的源代码:)

关于Javascript Date 接受非数字年份 "aaaa-05-04"作为有效日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67834369/

相关文章:

php - 将日期字段留空时,在 MySQL 数据库中将日期设置为 NULL

javascript - 尝试实例化 Date 对象时遇到错误

javascript - jQuery 使用 .scroll(handler) 滚动到一个元素

java - 两个 java.sql.Date 之间的 Select 语句

java - 当最后一个字符为非数字时 SimpleDateFormat 无法引发异常

javascript - React 和 Electron 与 Bablify : Uncaught TypeError: fs. readFileSync 不是一个函数

java - 将字符串转换为日期的问题

javascript - 如何从 Kaizala API 获取 accessToken

javascript - 如何找到哪个键触发了表单提交事件

javascript - 如何从隐藏的输入字段中添加和删除值?