JSFiddle - React, Tailwind, and code Playground

by pegla

JavaScript

let arrayOfDates = [{
   name: 'one',
   date: '2017-09-18'
}, {
   name: 'two',
   date: '2017-09-11'
}, {
   name: 'three',
   date: '2017-09-13'
}];

function getWeekNumber(d) {
    // Copy date so don't modify original
    d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
    // Set to nearest Thursday: current date + 4 - current day number
    // Make Sunday's day number 7
    d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay()||7));
    // Get first day of year
    var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1));
    // Calculate full weeks to nearest Thursday
    var weekNo = Math.ceil(( ( (d - yearStart) / 86400000) + 1)/7);
    // Return array of year and week number
    return [d.getUTCFullYear(), weekNo];
}

let newArrayOfDatesByWeek = arrayOfDates.reduce((prevVal, currVal, index)=>{
	let week = `week ${getWeekNumber(new Date(currVal.date))[1]} of ${getWeekNumber(new Date(currVal.date))[0]}`;
  if(!(week in prevVal)) {
  	prevVal[week] = [];	
  }
  prevVal[week].push(currVal);
  return prevVal;
}, []);

console.log(newArrayOfDatesByWeek);