Как получить диапазон дат за последние 3 недели, используя момент? - PullRequest
0 голосов
/ 31 августа 2018

Мне нужен диапазон дат за последние 3 недели, включая диапазон дат текущей недели.

Пример: сегодняшняя дата: 31/08/2018

вывод будет:

Aug 26 - Sep 01 , Aug 19 - Aug 25 , Aug 12 - Aug 18

Ответы [ 3 ]

0 голосов
/ 31 августа 2018

Вы можете найти начало недели, используя .startOf('week').

var currentWeek = getWeekRange(0);
var lastWeek = getWeekRange(-1);
var weekBeforeLast = getWeekRange(-2);

var currentWeek2 = getWeekRange2(0);

console.log(currentWeek, lastWeek, weekBeforeLast, currentWeek2);

function getWeekRange(week = 0) {
  var weekStart = moment().add(week, 'weeks').startOf('week');
  
  return [...Array(7)].map((_, i) => 
    weekStart.clone().add(i, 'day').format('DD/MM/YYYY')
  );
}

function getWeekRange2(week = 0) {
 var weekStart = moment().add(week, 'weeks').startOf('week');
 var days = [];
 for (var i = 0; i < 7; i++) {
   days.push(weekStart.clone().add(i, 'day').format('DD/MM/YYYY'));
 }
 return days;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.js"></script>

Для уточнения:

[...Array(7)] был использован для краткости. Он создает Array с 7 undefined предметами, т.е. [undefined, undefined, ...]. Эти элементы считаются заполнителями и будут отображаться в дни недели с помощью .map().

Несмотря на то что undefined, я использую элемент index в массиве для увеличения дня недели - другими словами, первый элемент массива, [undefined], будет иметь index 0, поэтому мы добавили бы 0 дней и добавили бы до конца недели.

Вы также можете сделать что-то вроде:

function getWeekRange(week = 0) {
  var weekStart = moment().add(week, 'weeks').startOf('week');
  var days = [];
  for (var i = 0; i < 7; i++) {
    days.push(weekStart.clone().add(i, 'day').format('DD/MM/YYYY'));
  }
  return days;
}
0 голосов
/ 26 мая 2019
 let startOfWeek = moment().subtract(1, 'weeks').startOf('week').toDate().toISOString();
 let endOfWeek = moment().subtract(1, 'weeks').endOf('week').toDate().toISOString();
 console.log(startOfWeek, endOfWeek)
0 голосов
/ 31 августа 2018

Попробуйте это

moment().range(moment().subtract(3, 'weeks'), moment());

moment().subtract(3, 'weeks') this line will return the time before 3 weeks, moment() will return time now and range() will take the range from those two.

Надеюсь, это поможет:)

...