如何创建一个日期递增的数组



我试图通过重复添加30分钟来生成一个时间数组。当我这样做时:

let t = new Date();
t.setHours(0, 0, 0, 0);
t.setHours(7);
t.setMinutes(t.getMinutes() + 30);

我有一个代表上午7:30的时间。然而,当我这样做时:

let t = new Date();
t.setHours(0, 0, 0, 0);
t.setHours(7);
let x = [];
while (t.getHours() <= 22) {
t.setMinutes(t.getMinutes() + 30);
x.push(t);
}
return x;

我收到大约30件物品,都是晚上11点。我猜这是因为它们都引用了同一个对象,而不是复制对象。使用for循环做同样的事情。

我该如何在一系列不同的时间内获得我想要的结果?

因为您正在推送一个"日期";对象,t添加到循环的每次迭代中的数组中。每次修改t时,实际上就是在修改数组中的所有实例。

您希望在循环的每次迭代中推送一个新的Date实例。Javascript中的Date类似乎很乐意接受另一个Date实例作为构造函数参数,因此修复非常简单:

只需更改这一行:

x.push(t);

对此:

x.push(new Date(t));

完整解决方案:

let t = new Date();
t.setHours(0, 0, 0, 0);
t.setHours(7);
let x = [];
while (t.getHours() <= 22) {
t.setMinutes(t.getMinutes() + 30);
x.push(new Date(t));
}
return x;
Array.from({length: 500}, (_, i) => new Date(Date.now() + i*1000*60*30))

这是因为您每次都在数组中推送相同的t。代替

t.setMinutes(t.getMinutes() + 30);

使用

let addedTimeInMilliSeonds=t.setMinutes(t.getMinutes(+30(;

x.push(新日期(addedTimeInMilliSeonds((;`

你应该没事的。(如果您不再需要t以前的值(

相关内容

  • 没有找到相关文章