gpt4 book ai didi

Javascript Date.setHours() 正在修改我没有引用的 Date 对象,使用了错误的日期

转载 作者:行者123 更新时间:2023-11-27 23:30:44 26 4
gpt4 key购买 nike

我想创建一个间隔几个小时的日期对象列表。因此,对于 10 小时来说,它将是:“星期一 20:00 --> 星期二 6:00 --> 星期二 16:00”,依此类推。我的想法是使用“基准”日期,例如上一个示例中的“星期一 20:00”,因此“base.setHours(20)、base.setHours(30)、base.setHours(40)”来获得该日期结果。

但是一旦我以某种方式调用 setHours() 使 Date 对象的“日”发生变化,这种变化就是永久性的。因此,在base.setHours(30)之后,base.setHours(40)从星期二开始,而不是从星期一开始,这就是我想要的。我尝试通过使用临时变量 loopday 来存储真实的原始日期 base 来修复此行为,但 Javascript 会及时返回以更改 base !

例如,此代码的输出:

var base = new Date(2015, 1, 4);
for(var hr = 0; hr < 50; hr += 10)
{
var loopday = base;
loopday.setHours(hr);
window.alert([base.getDay(), base.getHours()]);
}

是“[4, 0]、[4, 10]、[4, 20]、[5, 6]、[6, 16]、[8, 2]”。首先,我希望它全部是“[4, 0]”,因为我根本没有触及“day”;我只修改了“loopday”。而且,当日期从 1 月 4 日切换到 1 月 5 日后,月份的日期也会错误。应该是“..., [5, 6], [5, 16], [6, 2]”。

在实践层面上,我如何修改该代码,使 loopday 的日期和时间为 [4, 0], [4, 10], [4, 20] 、[5, 6]、[5, 16]、[6, 2]?在理解层面上,为什么 Javascript 会修改 base,以及是什么导致了最后两个输出在该月的某一天出现奇怪的行为?

最佳答案

将对 Date 实例的引用从一个变量分配给另一个变量不会生成副本。您必须明确指定一个新日期:

  var loopday = new Date(base);

一般来说,对 JavaScript 中任何类型对象的引用都是在赋值、函数调用和函数返回中传递的。必须明确制作副本。

关于Javascript Date.setHours() 正在修改我没有引用的 Date 对象,使用了错误的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34602502/

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