首页 > 解决方案 > How to get last 3 weeks date range using moment ?

问题描述

I need date range of last 3 weeks including current week date range.

Ex: today's date is : 31/08/2018

output will be :

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

标签: javascriptdatemomentjs

解决方案


您可以使用 找到一周的开始时间.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],将有一个indexof 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;
}

推荐阅读