const today = moment(); const thisYear = today.year(); const shortYear = (thisYear +'').slice('-2'); const thisWeek = today.isoWeek(); const thisDay = today.format('YYYY[W]WWE'); let current = thisYear; function leadingZeroPlusOne (n) { return ('0'+ (n + 1)).slice(-2); } function getWeeksArr (year) { const numWeeks = moment([year]).isoWeeksInYear(); let weeks = []; _.range(numWeeks).forEach(function (w) { let days = {}; _.range(7).forEach(function (d) { const day = year +'W'+ leadingZeroPlusOne(w) + (d + 1); days[day] = { unix: moment(day).format('X'), }; }); weeks.push(days); }); return weeks; } function render (year) { // cache two-digit year and clear everything var yr = (year +'').slice('-2'); document.body.innerHTML = ''; // add week rows const weeks = getWeeksArr(year); weeks.forEach(function (week, i) { const wk = leadingZeroPlusOne(i); const yrwk = yr + wk; const row = document.createElement('div'); row.className = 'week'; if (yrwk == shortYear + thisWeek) { row.className += ' current'; } const title = document.createElement('h2'); title.className = 'week-title'; title.innerText = yrwk; row.appendChild(title); const days = document.createElement('div'); days.className = 'days'; for (day in week) { let d = document.createElement('div'); d.className = 'day'; if (day == thisDay) { d.className += ' current'; } d.innerText = moment(day).format('ddd D MMM'); days.appendChild(d); } row.appendChild(days); document.body.appendChild(row); }); // scroll to current week $('body').animate({ scrollTop: $('.week.current').offset().top +'px', }, 150); } render(current); document.onkeydown = function (e) { // left if (e.which === 37) { current--; render(current); } // right if (e.which === 39) { current++; render(current); } };