使用 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"]
你可以这样做:
- 从第一个循环日期开始
- 使用
.add(1, 'weeks')
向重复日期添加一周(参见 https://momentjs.com/docs/#/manipulating/add/ )
- 在重复日期 < 结束日期时执行此操作
如果删除“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; }
我需要一个循环日期数组,其中包含开始日期和结束日期内每周的时间,使用 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"]
你可以这样做:
- 从第一个循环日期开始
- 使用
.add(1, 'weeks')
向重复日期添加一周(参见 https://momentjs.com/docs/#/manipulating/add/ ) - 在重复日期 < 结束日期时执行此操作
如果删除“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; }