gpt4 book ai didi

Javascript Date、setFullYear 更改时区

转载 作者:行者123 更新时间:2023-12-01 01:40:59 25 4
gpt4 key购买 nike

Javascript 日期与时区一起使用。如果我创建一个日期,它会设置时区。当我更新该日期的年份时,我不希望时区发生变化。然而,确实如此。最糟糕的是,它改变了时区,但没有改变时间,导致实际时间移动一小时!

这会导致一个问题,如果我有这个人的出生日期,并且想知道他今年的生日,我不能简单地使用birthdate.setFullYear(2018)将年份设置为当前年份,因为它会返回生日减去一小时。这意味着它发生在实际生日的前一天,即十一点。

let test = new Date('1990-10-20');
console.log(test);
console.log(test.toISOString().substring(0, 10));

// 1990-10-20 ( Sat Oct 20 1990 01:00:00 GMT+0100 (Central European Standard Time) )

test.setFullYear(2000);
console.log(test);
console.log(test.toISOString().substring(0, 10));

// 2000-10-19 ( Fri Oct 20 2000 01:00:00 GMT+0200 (Central European Summer Time) === one hour too soon!! )

可能您的时区无法重现,这是我的输出:

"1990-10-20T00:00:00.000Z"

1990-10-20

"2000-10-19T23:00:00.000Z"

2000-10-19

我发现的唯一解决方法是对日期进行子字符串化并将其替换为字符串值。如何使用 Date 对象做得更好?

最佳答案

嗯,也许使用 setUTCFullYear(...) ( MDN Docs ) 会更好?至少这样的话,不会耽误时间。

let test = new Date('1990-10-20');
console.log(test);
console.log(test.toISOString().substring(0, 10));

// "1990-10-20T00:00:00.000Z")

test.setUTCFullYear(2000);
console.log(test);
console.log(test.toISOString().substring(0, 10));

// "2000-10-20T00:00:00.000Z"

关于Javascript Date、setFullYear 更改时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52419067/

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