【问题标题】:Javascript: new Date() initialized with specific date string returns two different dates in different timezonesJavascript:使用特定日期字符串初始化的 new Date() 返回不同时区的两个不同日期
【发布时间】:2020-10-19 11:28:34
【问题描述】:

我正在使用 new Date() 为特定日期创建日期对象。但它返回不同时区的两个不同日期。见下文:

当我的机器位于印度时区 (IST) 时

console.log(new Date('2020-08-28')); //returns Fri Aug 28 2020 05:30:00 GMT+0530 (India Standard Time)

当我的机器处于美国时区 (CST) 时

console.log(new Date('2020-08-28')); //returns Fri Aug 27 2020 19:00:00 GMT-0500 (Central Daylight Time)

即使我告诉 JS 为给定的字符串创建日期,这是怎么发生的?这里的字符串是'2020-08-28'。

为什么会发生这种情况以及在这种情况下如何忽略时区?

【问题讨论】:

    标签: javascript date localization timezone


    【解决方案1】:

    From the ECMAScript specification:

    当 UTC 偏移表示不存在时,仅日期形式被解释为 UTC 时间,而日期时间形式被解释为本地时间。

    Date Time String Format 中描述了表单本身。

    请务必注意,将仅日期形式视为 UTC 与将此类形式视为当地时间的 ISO 8601 规范相冲突。这是一个已知问题,was done deliberately 以“网络现实”的名义。

    【讨论】:

      【解决方案2】:

      当您通过传递字符串实例化Date 时,它应该是指定时区的完整ISO 8601 字符串。由于您没有指定它,它需要格林威治标准时间 (±00:00),然后在显示时使用您当地的时区。如果您想将日期显示为 GMT,请使用此选项:

      console.log(new Date('2020-08-28').toUTCString());

      【讨论】:

      • 如果我通过 new Date('2020-08-28T00:00:00') 怎么办?
      • 我的回答其实是错误的,请看编辑
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 1970-01-01
      • 2023-04-03
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多