JSFiddle - React, Tailwind, and code Playground
by Mike McCaughan
HTML
<script src="https://raw.github.com/timrwood/moment/1.7.2/min/moment.min.js"></script>
<ul id="weeks"></ul>
JavaScript
function populateWeeks(currentDay, firstSunday, lastSaturday) {
var hz = moment.duration(lastSaturday.valueOf() - firstSunday.valueOf()).asHours(),
hours = [], hh = 0, h, hd, hourMoment,
year, month, day, dow, hour,
days = [], dd = 0, d, dw, lastDay,
weeks = [], ww = 0, w;
for (; hh < hz; hh++) {
hourMoment = moment(firstSunday).startOf('day').add('hours', hh);
year = hourMoment.year();
month = hourMoment.month();
dow = hourMoment.day();
day = hourMoment.date();
hour = hourMoment.hour();
h = {
index: hh,
year: year,
month: month,
dow: dow,
day: day,
hour: hour
};
if (lastDay !== day) {
lastDay = day;
if (hh !== 0) {
hd = dd * 24;
d = {
index: dd,
year: year,
month: month,
dow: dow,
day: day,
hours: hours.slice(hd, hd + 24)
};
days.push(d);
}
}
if (dow === 6) {
dw = ww * 7;
w = {
index: ww,
days: days.slice(dw, dw + 7);
};
weeks.push(w);
}
hours.push(h);
}
return {
weeks: weeks,
hours: hours,
days: days
};
}
var view = 'week',
currentDay = moment(),
firstSunday = view === 'week' ? moment().day(0) : moment().startOf('month').day(0),
lastSaturday = view === 'week' ? moment().day(6) : moment().endOf('month').day(6),
populated = populateWeeks(currentDay, firstSunday, lastSaturday);
console && console.log(populated);