使用 momentjs 或 javascript 在范围(StartDate 和 EndDate)内添加重复日期和时间

Add recurring date and time within range(StartDate and EndDate) using momentjs or javascript

我需要一个循环日期数组,其中包含开始日期和结束日期内每周的时间,使用 moment.js 或 javascript。

例如: 开始日期:2021-10-04T00:00:00Z 结束日期:2021-10-31T00:00:00Z

假设 2021-10-05T00:00:00Z 是一个重复日期,那么输出将为

["2021-10-05T00:00:00Z", "2021-10-12T00:00:00Z", "2021-10-19T00:00:00Z", "2021- 10-26T00:00:00Z"]

你可以这样做:

如果删除“Z”,则可以使用纯 js 将“+00:00”添加到所有字符串,以确保您的时区不会破坏此代码。

let start = "2021-10-04T00:00:00+00:00";
let end = "2021-10-31T00:00:00+00:00";
let date = "2021-10-05T00:00:00+00:00";

start = new Date(start);
end = new Date(end);
date = new Date(date);
    
let dates = [];
if (date < start) {
    console.log("bad input")
} else {
    while (date.getTime() < end.getTime()) {
        dates.push(date.toISOString());
        date = new Date(date.getTime() + 604800000); // add a week in milliseconds
    }
}

我们可以使用 Date.getUTCDate()Date.setUTCDate() 将日期提前几天,在本例中为七天。

然后我们可以使用 while 循环来填充结果数组。我在这里返回一组 Date 对象,可以使用 .toISOString() 转换为字符串。

let startDate = '2021-10-05T00:00:00Z';
let endDate = '2021-10-31T00:00:00Z';

function getWeeklyDates(start, end) {
    let date = new Date(start);
    const endDate = new Date(end);
    
    const result = [];
    while (date < endDate) {
        result.push(date);
        date = new Date(date);
        date.setUTCDate(date.getUTCDate() + 7);
    }
    return result;
}

console.log(getWeeklyDates(startDate, endDate).map(dt => dt.toISOString()))
.as-console-wrapper { max-height: 100% !important; top: 0; }