JavaScript - 获取2个日期之间的日期数组

293
var range = getDates(new Date(), new Date().addDays(7));
我希望“range”成为一个日期对象的数组,其中包括两个日期之间每一天的日期。关键是它还应该处理月份和年份的边界。

如果允许使用date-fns,可以使用eachDayOfInterval [1]和addDays [2]来返回开始日期和结束日期之间的日期数组。 - tinystone
34个回答

0
我使用了dayjs包来完成这个任务。
简单来说,dayjs有一个isBefore函数,你可以用它来检查开始日期是否在结束日期之前。如果返回true,那么将该日期推入一个数组,并加上1天。然后在一个while循环中重复这个过程,你就会得到日期列表。
代码将会像这个图片所示:code

请阅读为什么不应该上传代码/数据/错误的图片? 您可以[编辑]您的问题,并用[code block]替换图片。最简单的方法是将代码直接粘贴为文本,然后选择它并点击代码块按钮。 - undefined

0
getDates = (from, to) => {
    const cFrom = new Date(from);
    const cTo = new Date(to);

    let daysArr = [new Date(cFrom)];
    let tempDate = cFrom;

    while (tempDate < cTo) {
        tempDate.setUTCDate(tempDate.getUTCDate() + 1);
        daysArr.push(new Date(tempDate));
    }

    return daysArr;
}

0

你可以将第三个参数作为间隔使用。

function arrayDateRange(start, stop, step) {
    if (step < 1000) return [start, stop];
    return Array.from({ length: (stop - start) / step + 1 }, (value, index) => {
        return new Date(start.getTime() + index * step)
    });
}

arrayDateRange(new Date('2023-01-01'),new Date('2023-01-15'),(1000*60*60*24))

0

这个变量解决了这里大部分答案中的一个问题:当结束日期时间开始日期时间之前时,最后一个日期将不会包括在结果数组中。

function getDatesInRange(startDate, endDate) {
    const start = new Date(startDate);
    const dates = [];

    while (start.toISOString().slice(0, 10) <= endDate.toISOString().slice(0, 10)) {
        dates.push(new Date(start));
        start.setDate(start.getDate() + 1);
    }

    return dates;
}

通过比较两个日期的部分ISO字符串表示,我们确保只计算天数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接