【问题标题】:Javascript date string passed to Date constructor gives strange results传递给 Date 构造函数的 Javascript 日期字符串给出了奇怪的结果
【发布时间】:2015-10-12 20:48:39
【问题描述】:

为什么在创建新日期时使用格式相似的日期字符串会得到如此不同的结果?

CHROME(43.0.2357.134 m)控制台:

新日期('2014-12-25') 2014 年 12 月 24 日星期三 17:00:00 GMT-0700(山区标准时间) [Chrome 假定 Z 为 00:00 (UTC) 并返回该本地时间] 新日期('2014-1-25') 2014 年 1 月星期六 25 00:00:00 GMT-0700(山地标准时间) [什么?!完全相同的格式(我认为)但返回 25 而不是 24 ....见下...] 新日期('2014-01-25') 2014 年 1 月星期五 24 17:00:00 GMT-0700(山地标准时间) [...哦,前导 0 使它使用第一个示例中使用的逻辑] 新日期('2014/12/25') Thu Dec 25 2014 00:00:00 GMT-0700(山区标准时间) [使用 / 而不是 - 导致我相信大多数人期望的结果(?):当地时间 在指定的同一日期]

FIREFOX (39.0) 控制台:

新日期('2014-12-25') 日期 2014-12-25T00:00:00.000Z [不同于铬] 新日期('2014-1-25') 失效日期 [在 Firefox 中无法识别,与 Chrome 不同] 新日期('2014-01-25') 日期 2014-01-25T00:00:00.000Z [不同于铬] 新日期('2014/12/25') 日期 2014-12-25T07:00:00.000Z

【问题讨论】:

    标签: javascript date constructor


    【解决方案1】:

    教训似乎是:IF 您将在 Date 构造函数中使用字符串,确保其格式正确(根据ECMAScript standard): p>

    YYYY-MM-DDTHH:mm:ss.sssZ
    

    铬:

    新日期('2014-12-25T00:00:00.000-07:00') 2014 年 12 月 25 日星期四 00:00:00 GMT-0700(山地标准时间)

    火狐:

    新日期('2014-12-25T00:00:00.000-07:00') 日期 2014-12-25T07:00:00.000Z


    ECMAScript 标准在15.9.3.2

    中说
    If Type(v) is String, then
        Parse v as a date, in exactly the same manner as for the parse method (15.9.4.2);
    

    15.9.4.2 中写道:

    该函数首先尝试根据 以日期时间字符串格式 (15.9.1.15) 调用的规则。 如果 字符串不符合该格式函数可能回退到任何 特定于实施的启发式或特定于实施的日期格式

    ...这对我说,如果您不提供确切的格式,Chrome 和 Firefox 以及其他所有人都可以按照他们认为正确的方式解释日期字符串。 (注:格式有一定的余地,例如缺席的sss字段的值为“000”。详见15.9.1.15部分)

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 2016-02-23
      • 1970-01-01
      • 2017-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-01
      • 1970-01-01
      相关资源
      最近更新 更多