gpt4 book ai didi

Javascript 新日期

转载 作者:行者123 更新时间:2023-11-29 10:14:56 25 4
gpt4 key购买 nike

JavaScript 中有一件有趣的事,没什么大不了的,但我想知道,为什么会这样。

如果你这样做:

new Date('2014-6-12')

你会得到:

Thu Jun 12 2014 00:00:00 GMT-0600 (Central America Standard Time)

这完全没问题,但是如果您使用格式为“dd”而不是“d”的日期来做同样的事情,就像这样:

new Date('2014-06-12')

你会得到不同的结果:

Wed Jun 11 2014 18:00:00 GMT-0600 (Central America Standard Time)

最佳答案

因为“2014-06-12”似乎是没有时区的 ISO 8601 日期格式,所以它被大多数浏览器(但不是所有)视为 UTC(根据 ES5)。 “2014-6-12”被视为其他格式,因此被视为本地格式。

ES6 将对此进行更改,以便将没有时区的 ISO 8601 日期视为本地日期(根据 ISO 8601)。困惑? ECMAScript 2015 最初被解释为将仅 ISO 8601 日期格式视为本地格式,但已更改为将其视为 UTC。所有后续版本的 ECMAScript 也将它们视为 UTC(这与 ISO 8601 不一致)。

所以不要使用内置解析器解析字符串(即 new Date(string)Date.parse(string) ),它的行为在浏览器之间不一致并且不一定符合标准。使用库,或编写您自己的简单解析器:

// Expect year-month-day, treat as local date
function parseYMD(s) {
var b = s.split(/\D+/);
return new Date(b[0], --b[1], b[2]);
}

上面很简单,但没有测试日期是否有效,为此需要额外一行:

// Expect year-month-day, treat as local date
function parseYMD(s) {
var b = s.split(/\D+/);
var d = new Date(b[0], --b[1], b[2]);
return d && d.getFullYear() == b[0] && d.getDate() == b[2]? d : NaN;
}

另请参阅为什么 Date.parse give incorrect results?

关于Javascript 新日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24316268/

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