首页 > 解决方案 > 如何创建一个递增日期的数组?

问题描述

我试图通过重复添加 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:00。我猜是因为它们都指的是同一个对象而不是复制对象。使用 for 循环做同样的事情。

我将如何获得一系列不同时间的预期结果?

标签: javascriptarraysdate

解决方案


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;

推荐阅读