我们的团队才刚刚开始使用moment.js进行日期查询,并且想知道是否有一个函数可以创建一个间隔x天的日期数组。例如,如果开始日期为7/1/2019,结束日期为6/30/2020,间隔为7天;有一个矩函数可以创建如下所示的日期数组:
[7/8/2019,
7/15/2019,
7/22/2019,
7/29/2019,
8/5/2019,
...
6/29/2020]
答案 0 :(得分:1)
也许不是特定的矩函数,但是矩肯定可以提供所有要素。查看add()(用于添加7天)和isBefore()(用于结束日期)。
我制作了一个片段,该片段的功能与您的要求接近:
var startDate = '2019-07-01';
var endDate = '2020-06-30'
var current = new moment(startDate);
var dates = [];
while (current.isBefore(endDate)) {
dates.push(current.format('MM-DD-YYYY'));
current.add(7, 'days');
}
console.log(dates)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.12.0/moment.js"></script>
答案 1 :(得分:1)
您可以使用for-of
循环并使用生成器函数创建数组。
function* dateRange(start, end, interval) {
start = moment(start);
end = moment(end);
interval = moment.duration(interval);
while (start.isBefore(end)) {
yield start;
start.add(interval);
}
}
用法:
const dates = [...dateRange(start, end, interval)];
for (date of dateRange(start, end, interval)) { /* ... */ }
答案 2 :(得分:1)
只需创建一个函数即可接受开始日期和结束日期以及一个时间间隔,并一直将直到该日期为止的日期添加到数组中。
const datesArray = (from, to, interval) => {
let ret = [];
const fromDate = moment(from, 'DD-MM-YYYY');
const toDate = moment(to, 'DD-MM-YYYY');
let date = fromDate.add(interval, 'days');
while(toDate > date) {
ret.push(date.format('MM-DD-YYYY'));
date = moment(date).add(interval, 'days');
}
return ret;
}
答案 3 :(得分:0)
您可以为此使用momentJS添加功能。例如
moment().add(7, 'days');
您可以通过在开始日期之间添加间隔来循环浏览。 https://momentjs.com/docs/#/manipulating/add/
另一个基于momentjs的项目是这个https://github.com/rotaready/moment-range 您可以在其中直接获取带间隔的范围。但是,如果这是唯一的要求,则最好使用一个简单的函数。
答案 4 :(得分:0)
创建一个具有灵活解决方案的生成器:
/**
* @param start: moment instance not included in result.
* @param end: moment instance not included in result.
* @param step: moment duration instance.
* @return Generator for moment instances between start and end.
*/
function* generateMoments(start, end, step) {
const variableMoment = start.clone();
while(true) {
variableMoment.add(step);
if(variableMoment < end) {
yield variableMoment.clone();
} else {
break;
}
}
}
并要求它提供日期列表:
Array.from(
generateMoments(moment('2019-07-01'), moment('2020-06-30'), moment.duration({ days: 7}))
).map(m => m.format(localeDependentFormat))