【问题标题】:Invalid string is converted to date无效的字符串被转换为日期
【发布时间】:2019-04-06 14:50:20
【问题描述】:

嗨,我有一个字符串“Windows-10”,当我尝试通过 new Date() 构造函数解析它时,它会被解析并给出一个完全有效的日期,即“Mon Oct 01 2001 00:00:00 GMT+0530 (印度标准时间)'

我不知道为什么会发生这种情况,我也尝试过使用其他 Windows 字符串,例如“Windows-7”、“Windows-99”等,它们都很容易解析。

【问题讨论】:

标签: javascript datetime


【解决方案1】:

您目睹的行为是特定于实现的,对于单参数 Date(value) 构造函数,20.3.2.2 章节中的 ECMA-262 规范涵盖了这一行为。您的示例将进入步骤 3.b.ii.1。这表明字符串将根据20.3.3.2 章节中为Date.parse(string) 方法制定的规则进行解析。该方法规范定义:

该函数首先尝试根据日期时间字符串格式(20.3.1.16)中调用的规则(包括延长年份)解析字符串的格式。如果字符串不符合该格式,则函数可能会退回到任何特定于实现的启发式或特定于实现的日期格式。无法识别的字符串或包含非法元素值的日期字符串格式将导致 Date.parse 返回 NaN

因为您的字符串显然不符合日期时间字符串格式,所以浏览器会退回到其特定于实现的算法。例如,我的 Chrome 70 返回一个当前时间的 Date 对象,该对象对应于调用无参数 Date() 构造函数。另一方面,IE11 将字符串解析为 NaN 并返回一个具有 "invalid date" 值的 Date 对象。

【讨论】:

    猜你喜欢
    • 2019-12-13
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2013-06-28
    • 2012-05-18
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    相关资源
    最近更新 更多