javascript - 如何创建一个递增日期的数组?
问题描述
我试图通过重复添加 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 循环做同样的事情。
我将如何获得一系列不同时间的预期结果?
解决方案
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;
推荐阅读
- excel - Windows 10 上的 VBA Shell 调用权限被拒绝
- git - git:如何将当前更改的工作区升级到 github 中的新版本(标签)
- .net - 即使使用 HTML.HiddenFor,列表也是空的
- jira - 在反向代理中通过 rest 查询给出 403 未授权
- python - 如何通过考虑其他数据帧的条件在 python 中生成新的数据帧?
- c++ - 如何在宏中正确转发结构化绑定参数
- c# - 通过 C# mvc 迭代一个对象并使用 group 创建一个新对象
- python - 如何在方法签名中注释指向 C 字符数组的指针?
- ios - UICollectionView 重新排序:交互式移动还是拖放?
- python - 无法使用 Gremlinpython 使用“.toList()”列出 Janusgraph 中存在的所有顶点