Skip to content

Instantly share code, notes, and snippets.

@ironman9967
Last active August 29, 2015 14:07
Show Gist options
  • Save ironman9967/47a44b18f19288f6a952 to your computer and use it in GitHub Desktop.
Save ironman9967/47a44b18f19288f6a952 to your computer and use it in GitHub Desktop.
gets current and next dates based on day of week and week number
var _ = require('lodash');
var today = new Date('9/30/2014');
var dayOfWeek = "tuesday";
var weekNumber = 4;
console.log(getCurrentAndNext(today, dayOfWeek, weekNumber));
function getCurrentAndNext(today, dayOfWeek, weekNumber) {
var result = { current: void 0, next: void 0 };
var calcDate = getDateOfNumberedDayOfWeek(dayOfWeek, today.getMonth(), weekNumber);
if (calcDate.getTime() < today.getTime() || compareJustDate(calcDate, today) === 0) {
result.current = calcDate;
result.next = getDateOfNumberedDayOfWeek(dayOfWeek, today.getMonth() + 1, weekNumber);
}
else {
result.current = getDateOfNumberedDayOfWeek(dayOfWeek, today.getMonth() - 1, weekNumber);
result.next = calcDate;
}
return result;
}
function getDateOfNumberedDayOfWeek(dayOfWeek, month, weekNumber) {
weekNumber = weekNumber - 1;
var weeks = calculateWeeks(month);
if (weeks[0][dayOfWeek] === void 0)
weekNumber++;
var week = weeks[weekNumber];
return week[dayOfWeek];
}
function calculateWeeks(month) {
var date = new Date();
date.setMonth(month, 1);
var weeks = {};
var weekCounter = 0;
while (month === date.getMonth()) {
if (date.getDay() / 6 === 0)
weekCounter++;
if (weeks[weekCounter] === void 0)
weeks[weekCounter] = {};
weeks[weekCounter][getDayOfWeekString(date.getDay())] = new Date(date.getTime());
date.setDate(date.getDate() + 1);
}
return weeks;
}
function compareJustDate(datetime1, datetime2) {
var d1 = new Date(datetime1.getMonth() + '/' + datetime1.getDate() + '/' + datetime1.getFullYear());
var d2 = new Date(datetime2.getMonth() + '/' + datetime2.getDate() + '/' + datetime2.getFullYear());
if (d1 < d2) return -1;
else if (d1 > d2) return 1;
else return 0;
}
function getDayOfWeekString(dayOfWeekInt) {
switch (dayOfWeekInt) {
case 0: return "sunday";
case 1: return "monday";
case 2: return "tuesday";
case 3: return "wednesday";
case 4: return "thursday";
case 5: return "friday";
case 6: return "saturday";
}
throw new Error("Unable to determine day of week from: " + dayOfWeekInt);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment