【问题标题】:new Date() with ISO 8061 date creates date according to timezone具有 ISO 8061 日期的 new Date() 根据时区创建日期
【发布时间】:2016-04-25 05:39:58
【问题描述】:

如果我使用 new Date('2015-03-25') 创建 Date 对象,我得到的对象是 Tue Mar 24 2015 16:00:00 GMT-0800 (AKDT)。是预期的吗?

【问题讨论】:

  • 取决于引擎实现的语言版本。解析 YYYY-MM-DD... 使用 ES5 时,如果未提供时区,则假定为 UTC。在 ES6 中,这改为假设用户的时区。 – 相关:Why does Date.parse give incorrect results?
  • 谢谢@JonathanLonowski。
  • @JonathanLonowski — 不,ECMAScript 2015 也采用 UTC(参见TC39 discussion)。但无论如何,永远不应使用 Date 构造函数或 Date.parse 解析字符串。手动操作(2 行函数可以,如果需要,也可以使用库)。
  • @RobG 是的,看起来 ES 2016 (ES7) 计划将其更改回 UTC 用于仅限日期的字符串,但这尚未发布并且仍然可以更改。目前,已发布的标准在不存在时使用当地时间,即使引擎改为遵守下一个草案。

标签: javascript date iso


【解决方案1】:

这是预期的吗?

不幸的是,Ecma TC39 决定将仅日期形式的 ISO 8601 字符串视为 UTC 而不是本地(根据 ISO 8601)。

您可能想阅读马特约翰逊的blog on the issue

解析日期字符串的唯一可靠方法是手动进行。图书馆可以提供帮助,但通常不是必需的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 2015-11-19
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多