@jsnodor/week-pack
Version:
Utilities to generate arrays made of date objects grouped into 7 items to form a week
70 lines • 2.65 kB
JavaScript
;
(function (global) {
function resetDay(day) {
var date = new Date(day);
for (var m of ['Hours', 'Minutes', 'Seconds', 'Milliseconds'])
date['set' + m](0);
return date;
}
function prependWeeks(startDate, numWeeks = 10) {
var data = [];
var argDate = startDate == 'today' ? resetDay(new Date) : new Date(startDate);
var day0 = new Date(argDate.getTime() - (1000 * 60 * 60 * 24));
for (var i = 0; i < numWeeks; i++) {
var tmp = [];
for (var j = 0; j < 7; j++) {
var dt = new Date(day0.getTime() - ((j + i * 7) * (1000 * 60 * 60 * 24)));
tmp.unshift(dt);
}
data.unshift(tmp);
}
return data;
}
function appendWeeks(startDate, numWeeks = 10) {
var data = [];
var argDate = startDate == 'today' ? resetDay(new Date) : new Date(startDate);
var day0 = new Date(argDate.getTime() + (1000 * 60 * 60 * 24));
for (var i = 0; i < numWeeks; i++) {
var tmp = [];
for (var j = 0; j < 7; j++) {
var dt = new Date(day0.getTime() + ((j + i * 7) * (1000 * 60 * 60 * 24)));
tmp.push(dt);
}
data.push(tmp);
}
return data;
}
function generateInitialWeeks(startDate, numWeeks = 8) {
var today = startDate == 'today' ? resetDay(new Date) : new Date(startDate);
var firstDayOfThisWeek = computeFirstDayOfWeek(today);
var after = appendWeeks(new Date(firstDayOfThisWeek.getTime() - (1000 * 60 * 60 * 24)), numWeeks);
var before = prependWeeks(firstDayOfThisWeek, numWeeks);
var pack = before.concat(after);
return [firstDayOfThisWeek, today, pack];
function computeFirstDayOfWeek(d) {
d = new Date(d);
var day = d.getDay(), diff = d.getDate() - day + (day == 0 ? -6 : 1);
return new Date(d.setDate(diff));
}
}
function isBrowser() {
var process = process || null;
var require = require || null;
if (typeof process === "object" &&
typeof require === "function") {
return false;
}
if (typeof importScripts === "function") {
return false;
}
if (typeof window === "object") {
return true;
}
}
const WEEK_PACK = { prependWeeks, appendWeeks, generateInitialWeeks };
if (isBrowser())
Object.assign(global, { WEEK_PACK });
else
Object.assign(global, WEEK_PACK);
}(this));
//# sourceMappingURL=index.js.map