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>
<p>Arguments:</p>
<ul id="args"></ul>
<p>Results:</p>
<ul id="weeks"></ul>
<ul id="days"></ul>
<ul id="hours"></ul>
JavaScript
var hourCache = {}, dayCache = {}, weekCache = {};
function makeHours(key, hours) {
var localHours = hours || hourCache[key];
if (hours) hourCache[key] = hours;
if (localHours) return localHours;
localHours = [];
var hz = Math.ceil(moment.duration(key.lastSaturday.valueOf() - key.firstSunday.valueOf()).asHours()),
hh = 0, h, hd, hourMoment,
year, month, day, dow, hour;
for (; hh < hz; hh++) {
hourMoment = moment(key.firstSunday).startOf('day').add('hours', hh);
year = hourMoment.year();
month = hourMoment.month();
dow = hourMoment.day();
day = hourMoment.date();
hour = hourMoment.hours();
h = {
index: hh,
year: year,
month: month,
dow: dow,
day: day,
hour: hour
};
localHours.push(h);
}
hourCache[key] = localHours;
return localHours;
}
function makeDays(key, hours) {
var days = dayCache[key];
if (days && !hours) return days;
days = [];
var localHours = hours || makeHours(key),
hz = localHours.length, hh = 0, h, hd, hourMoment,
year, month, day, dow,
dd = 0, d, lastDay = key.firstSunday.day();
for (; hh < hz; hh++) {
h = localHours[hh];
hourMoment = hourToMoment(h);
year = hourMoment.year();
month = hourMoment.month();
dow = hourMoment.day();
day = hourMoment.date();
if (lastDay !== day) {
hd = dd * 24;
d = {
index: dd,
year: year,
month: month,
dow: dow,
day: day,
hours: localHours.slice(hd, hd + 24)
};
if...