workweek column builder

workweek column builder

by Chance Nursey-Bush

JavaScript

function NumDaysBetweenDates(firstDt, secondDt) {
  return Math.round((secondDt - firstDt) / (1000 * 60 * 60 * 24));
}

function GetWorkWeeksForYear(year) {
  var dt = new Date("12/31/" + year);
  var dayOfWeekDt = dt.getDay();
  
  return dayOfWeekDt === 6 ? 53 : 52;
}

function GetWorkweekForDate(dt2) {
  var dt2Year = dt2.getFullYear();
  var dt1 = new Date("1/1/" + dt2Year);
  
  var numDaysBetween = NumDaysBetweenDates(dt1, dt2);

  var dayOfWeekDt1 = dt1.getDay();
  var dayOfWeekDt2 = dt2.getDay();

  var firstDayOfWW1 = new Date(dt1);
  firstDayOfWW1.setDate(dt1.getDate() - dayOfWeekDt1);

  var firstDayOfCurrent = new Date(dt2);
  firstDayOfCurrent.setDate(dt2.getDate() - dayOfWeekDt2);

  var daydiffVal = NumDaysBetweenDates(firstDayOfWW1, firstDayOfCurrent);

  var workWeek = (daydiffVal / 7) + 1;
  return workWeek;
}


var startDateStr = "Thu Jan 25 2017 00:00:00 GMT-0700 (US Mountain Standard Time)";
var stopDateStr = "Thu Feb 22 2018 00:00:00 GMT-0700 (US Mountain Standard Time)";

var array = [];
var startDate = new Date(startDateStr);
var startWW = GetWorkweekForDate(startDate);

var startYear = startDate.getFullYear();

var endDate = new Date(stopDateStr);
var endWW = GetWorkweekForDate(endDate);

var endYear = endDate.getFullYear();

var yearDiff = endYear - startYear;

for(var i = startYear; i < endYear + 1; ++i){
	endWW += GetWorkWeeksForYear(i);
}

for (var x = startWW; x < endWW + 1; ++x) {
  var y = x % 52;
  array.push("WW" + y + ", " + startYear);
}
console.log(array);