javascript - 使用时刻 js nodejs 将日期推送到数组
问题描述
我正在 NodeJs 中编写一个函数,其中获取 2 个日期会返回一个包含该范围内所有日期的数组。相反,我得到一个数组,它在相同的日期添加到它,并且每次都删除它自己。
例如:获取开始日期 1/11/2026 和结束日期 3/11/2026 它应该返回 [1/11/2026, 2/11/2026, 3/11/2026] 现在它返回:[1/11/ 2026],[2/11/2026, 2/11/2026],[3/11/2026, 3/11/2026, 3/11/2026]
我尝试从 while 格式中移出,但我将其转换为字符串我尝试使用 2 个数组并使用扩展运算符但没有成功
这是我的代码:
const dateList = ({ start, end }) => {
let now = moment(start);
const end = moment(end);
let dates = [];
while (now.format('YYYY-MM-DD') <= end.format('YYYY-MM-DD')) {
dates.push(now);
now = now.add(1, 'days');
}
return dates;
}
解决方案
瞬间使用对象实例
您的变量now
是时刻日期的实例,因此如果您将其推送到数组中并将他的日期设置为 +1,则数组中的实例也会得到此更改,因为它是同一个实例。您需要推送您的时刻实例的克隆。
const dateList = ({ start, end }) => {
let now = moment(start);
const end = moment(end);
let dates = [];
while (now.format('YYYY-MM-DD') <= end.format('YYYY-MM-DD')) {
dates.push(now.clone());
now = now.add(1, 'days');
}
return dates;
}
您可以使用时刻查询来测试是否end
在now
.
while(now.format('YYYY-MM-DD') <= end.format('YYYY-MM-DD'))
=>while(now.isSameOrBefore(end))
最终代码:
const dateList = ({ start, end }) => {
let now = moment(start);
const end = moment(end);
let dates = [];
while (now.isSameOrBefore(end)) {
dates.push(now.clone());
now = now.add(1, 'days');
}
return dates;
}
推荐阅读
- python - 如何在 Tkinter 中刷新没有 .mainloop() 函数的窗口?
- r - 如何以“tidyverse”的方式在 R 中按名称重新编码几列?
- macos - https 在 macos 上使用 openssl CA 证书作为受信任
- go - 扫描到具有结构映射的结构
- php - 我如何运行命令来执行 .php 文件?
- apache - 即使在安装证书后,Apache 仍会继续颁发自签名证书
- javascript - 如何在 For/Of 循环中将升序数据值添加到 Div 元素?
- sql - postgresql 为钱推荐的数据类型
- css - Wordpress:我可以在背景图像上创建自定义形状叠加层吗?
- javascript - 如何将 NextJS router.query 转换为数字?