gpt4 book ai didi

javascript - Javascript 新日期函数中的奇怪行为

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:38:14 27 4
gpt4 key购买 nike

我试图在 javascript 中从字符串创建 Date 对象,但我看到 javascript 在这里解析日期字符串非常奇怪。

> new Date("2012-01-01");
Sun Jan 01 2012 07:00:00 GMT+0700 (ICT)

> new Date("01-01-2012");
Sun Jan 01 2012 00:00:00 GMT+0700 (ICT)

> new Date("2012-01-01") == new Date("01-01-2012")
false

我使用 Chrome 32,如您所见,它们相差 7 小时。请告诉我这里发生了什么?

最佳答案

这都是关于浏览器如何实现 Date.parse ( spec )。该方法在传递给 Date 构造函数 (spec) 的字符串上调用,并首先尝试将字符串与已知格式进行匹配以确定哪些值在哪里。我希望不同的浏览器以稍微不同的方式实现该决策树,但 Chrome 的实现可能假设 "2012-01-01" 版本是 ISO-8601 的前缀基于 Zulu 或 GMT/UTC 的标准,包括时区 ("2012-01-01T00:00:00Z-07:00") 而 "01-01- 2012" 版本是基于您本地时区的本地化版本,无需指定它 ("01-01-2012 00:00:00"),因此 7 小时差异基于 ISO 标准日期和本地化日期之间的 7 小时偏移。相比之下,Date.prototype.toString() ( spec ) 应该显示本地时间并由 Date 构造函数返回,这就是它本地化的原因两者都从您的测试中返回值。

来自spec对于 Date.parse:

The function first attempts to parse the format of the String according to the rules called out in Date Time String Format (15.9.1.15). If the String does not conform to that format the function may fall back to any implementation-specific heuristics or implementation-specific date formats. Unrecognizable Strings or dates containing illegal element values in the format String shall cause Date.parse to return NaN.

表示如果您不使用 15.9.1.15 中指定的完整 ISO-8601 日期,浏览器可以在进行时弥补它,或者只给你 NaN。尽管这是标准,但某些浏览器因实际上不遵循标准而臭名昭著,因此您可能会考虑通过自己解析数据并使用其他 Date 构造函数(spec)明确指定所有参数。 ).

关于javascript - Javascript 新日期函数中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56398500/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com