首页 > 解决方案 > 使用时刻 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;
}

标签: javascriptnode.jsmomentjsbackend

解决方案


瞬间使用对象实例

您的变量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;
}

您可以使用时刻查询来测试是否endnow.

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;
}

推荐阅读