gpt4 book ai didi

javascript - 使用破折号而不是斜杠将日期字符串转换为日期对象会产生不一致的结果

转载 作者:行者123 更新时间:2023-11-30 21:08:31 26 4
gpt4 key购买 nike

我正在尝试将 javascript 日期字符串转换为日期对象。似乎当我用斜杠格式化字符串时,比如 2010/05/21,我得到了我期待的日期对象,但是当我用破折号格式化字符串时,比如 2010-05 -21,我得到一个不同的日期对象,它似乎指的是前一天。

以下代码说明了我的问题:

var aDate = new Date('2010-05-21')
console.log(aDate.toDateString())
console.log(aDate.toISOString())

console.log('=-=-=-=-=')

var anotherDate = new Date('2010/05/21')
console.log(anotherDate.toDateString())
console.log(anotherDate.toISOString())

以上代码产生以下输出:

2010-05-21T00:00:00.000Z
Thu May 20 2010
=-=-=-=-=
2010-05-21T06:00:00.000Z
Fri May 21 2010

似乎部分问题可能与时区有关,因为获取日期对象的 ISO 字符串显示日期对象彼此相隔 6 小时,但我不知道为什么使用破折号而不是斜杠会导致那个。我在 MacOS Sierra 上使用 Google Chrome,以防相关。

最佳答案

2010/05/21 是一种非 ISO 日期格式,因此支持将取决于浏览器实现。一些浏览器可能会拒绝它,其他浏览器会接受它但使用不同的时区。看起来您的浏览器正在用您本地的时区解析 2010/05/21

2010-05-21 是一个简化的 ISO 8601格式,所以 ES5+ 有关于如何解析它的规范。特别是,it must assume the UTC time zone .

您可以通过将其与您的浏览器解析 ISO 8601 日期和时间(ES5 规范称 must use the local time zone)的方式进行比较来验证它是否使用您的本地时区。

var dateNonISO = new Date('2010/05/21');
var dateLocal = new Date('2010-05-21T00:00:00');
var dateUTC = new Date('2010-05-21');

console.log("Non-ISO:", dateNonISO.toISOString());
console.log("ISO Local:", dateLocal.toISOString());
console.log("ISO UTC:", dateUTC.toISOString());

关于javascript - 使用破折号而不是斜杠将日期字符串转换为日期对象会产生不一致的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46373384/

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