code.cycling
code.cycling

Reputation: 1274

Get current week

So i used momentjs to handle my date formats and get the current week.

But my question is how do i get it to start from monday to sunday.

getweek.js

function getCurrentWeek() {
  var currentDate = moment();

  var weekStart = currentDate.clone().startOf('week');
  var weekEnd = currentDate.clone().endOf('week');

  var days = [];

  for (var i = 0; i <= 6; i++) {
    days.push(moment(weekStart).add(i, 'days').format("MMMM Do,dddd"));
  }
  console.log($scope.weekDays = days);
}

result

{0:"November 5th,Sunday"
1:"November 6th,Monday"
2:"November 7th,Tuesday"
3:"November 8th,Wednesday"
4:"November 9th,Thursday"
5:"November 10th,Friday"
6:"November 11th,Saturday"}

expected result

{0:"November 6th,Monday"
1:"November 7th,Tuesday"
2:"November 8th,Wednesday"
3:"November 9th,Thursday"
4:"November 10th,Friday"
5:"November 11th,Saturday"
6:"November 12th,Sunday"}

Thanks.

Upvotes: 10

Views: 27276

Answers (3)

Thushara
Thushara

Reputation: 246

 getWeekDays (numberOfWeek:number,numberOfDays:number) {
    let weekStart = DateTime.now().startOf('week');
    for (let week=1 ; week <= numberOfWeek ; week++ ){
      const weekDays = [];
      for(let day=0 ; day < numberOfDays; day++ ){
        weekDays.push(weekStart.plus({ days: day }).toFormat('yyyy-MM-dd'))
      }
      this.weeks.push(weekDays);
      weekStart = weekStart.plus({ days: 7 });
    }
  }

The above method will allow you to produce an array of week days for a given number of weeks.

the end outcome will be as follows

enter image description here

Upvotes: 1

Chava Geldzahler
Chava Geldzahler

Reputation: 3730

You can use startOf('isoWeek') to start the week at Monday.

var weekStart = currentDate.clone().startOf('isoWeek');

function getCurrentWeek() {
  var currentDate = moment();

  var weekStart = currentDate.clone().startOf('isoWeek');
  var weekEnd = currentDate.clone().endOf('isoWeek');

  var days = [];

  for (var i = 0; i <= 6; i++) {
    days.push(moment(weekStart).add(i, 'days').format("MMMM Do,dddd"));
  }
  console.log(days);
}

getCurrentWeek();
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.1/moment.min.js"></script>

Upvotes: 17

klugjo
klugjo

Reputation: 20885

Use 'isoweek' instead of 'week'

var currentDate = moment();

var weekStart = currentDate.clone().startOf('isoweek');

var days = [];

for (var i = 0; i <= 6; i++) {
    console.log(moment(weekStart).add(i, 'days').format("MMMM Do,dddd"));
}

Upvotes: 1

Related Questions