gpt4 book ai didi

javascript - 日期 ('2015-1-1' ) 输出不同于日期 (2015-01-01)

转载 作者:数据小太阳 更新时间:2023-10-29 04:20:26 26 4
gpt4 key购买 nike

我刚刚发现如果我使用new Date('2015-1-1'),时间是没有时区影响的,但是如果我使用new Date('2015-01 -01') 时间在 Node.js 中具有时区效果。

我输出 4 Date():

    console.log(new Date('2015-1-1'));
console.log(new Date('2015-01-1'));
console.log(new Date('2015-1-01'));
console.log(new Date('2015-01-01'));

输出是

Thu Jan 01 2015 00:00:00 GMT+0800 (CST)
Thu Jan 01 2015 00:00:00 GMT+0800 (CST)
Thu Jan 01 2015 00:00:00 GMT+0800 (CST)
Thu Jan 01 2015 08:00:00 GMT+0800 (CST)

你可以看到最后时间是 08:00:00 因为我在 +8 时区。

我认为输出取决于月份或日期数字的数字。当它是 10、11 或 12 时,输出总是 08:00:00

我想知道为什么以及是否有更好的方法来处理这个问题,除了手动检查月份和日期数字?

最佳答案

直到并包括 ECMA-262 第 3 版,日期字符串的解析完全依赖于实现。对于 ES5,没有时区的 ISO 8601 格式字符串将被解析为 UTC,但是解析任何其他类型的日期字符串仍然依赖于实现。

对于 ECMAScript 2015,此类没有时区的字符串将被解析为本地字符串(即基于系统设置的偏移量)。

因此,您的 Node.js 实现似乎无法将前 3 个字符串识别为 ISO 8601,因此根据将它们视为 UTC 的其他一些内部逻辑来解析它们。

最后一个字符串被视为符合 ISO 8601 标准,因此被解析为本地字符串。

如果您希望将所有此类字符串解析为本地字符串,您可以使用一个简单的函数,如:

/*  @param {string} s - date string in format yyyy-[m]m-[d]d
** @returns {Date} - a Date object for the specified date in a
** timezone based on system settings.
** Assumes that the string is a valid date.
*/
function parseISOLocal (s) {
var b = s.split(/\D/);
return new Date(b[0], b[1]-1, b[2]);
}

document.write(parseISOLocal('2015-1-1'))

关于javascript - 日期 ('2015-1-1' ) 输出不同于日期 (2015-01-01),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33982144/

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