【问题标题】:valid date is coming as output from invalida date Javascript [duplicate]有效日期来自无效日期Javascript的输出[重复]
【发布时间】:2017-01-31 13:28:52
【问题描述】:

我无法理解为什么在给出无效日期时 javascript 给出的有效日期等于 1 dec 日期?这种行为是否出于特定原因并入语言中?因为它必须是我的用例的无效日期 新日期(“2017 年 11 月 31 日”)

【问题讨论】:

标签: javascript validation date


【解决方案1】:

首先,Date constructor 不是为了验证输入而设计的,甚至不是为了挑剔。相反,它被明确设计为不惜一切代价创建一个实例,具有这样的创造性规则:

其中 Date 被称为具有多个参数的构造函数,如果 值大于其逻辑范围(例如 13 被提供为 月值或分钟值 70),相邻的值将 进行调整。例如。 new Date(2013, 13, 1) 等价于 new 日期(2014, 1, 1)

因此,如果您确实需要验证日期,则需要查看其他地方。

关于11/31/2017,构造函数期望这样:

代表日期的字符串值。字符串应该是一个格式 被Date.parse() 方法识别(IETF-compliant RFC 2822 timestamps 也是ISO8601 的一个版本)。

...看起来不错。但这如下(强调我的):

使用 Date 构造函数(和 Date.parse, 它们是等价的)由于浏览器而强烈反对 差异和不一致

如果我们深入研究Date.parse() 文档,我们最终会读到:

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

但是,日期字符串中的无效值无法识别为 ISO 格式 ECMA-262 定义的可能会或可能不会导致 NaN,具体取决于 提供的浏览器和值,例如:

// Non-ISO string with invalid date values
new Date('23/25/2014');

在 Firefox 30 和 2015 年 11 月 25 日被视为本地日期 Safari 7 中的无效日期

这个后备案例是你的约会对象。

【讨论】:

    猜你喜欢
    • 2019-02-11
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    相关资源
    最近更新 更多