使用Moment.js的日期数组

时间:2019-07-01 19:15:07

标签: javascript arrays momentjs

我们的团队才刚刚开始使用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]

5 个答案:

答案 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))