@jonstuebe/allot-utils
Version:
Util functions for Allot
73 lines • 2.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const date_fns_1 = require("date-fns");
function firstDayOfMonth(date) {
return date_fns_1.setDate(date, 1);
}
exports.firstDayOfMonth = firstDayOfMonth;
function getSemiMonthlyForDate(date) {
let dates = [];
let firstDate = date_fns_1.setDate(date, 15);
switch (date_fns_1.getDay(firstDate)) {
case 6:
firstDate = date_fns_1.addDays(firstDate, -1);
break;
case 0:
firstDate = date_fns_1.addDays(firstDate, -2);
break;
}
if (date_fns_1.isAfter(firstDate, date)) {
dates.push(firstDate);
}
let secondDate = date_fns_1.lastDayOfMonth(date);
switch (date_fns_1.getDay(secondDate)) {
case 6:
secondDate = date_fns_1.addDays(secondDate, -1);
break;
case 0:
secondDate = date_fns_1.addDays(secondDate, -2);
break;
}
if (date_fns_1.isAfter(secondDate, date)) {
dates.push(secondDate);
}
return dates;
}
exports.getSemiMonthlyForDate = getSemiMonthlyForDate;
function getSemiMonthlyForMonth(date) {
return getSemiMonthlyForDate(firstDayOfMonth(date));
}
exports.getSemiMonthlyForMonth = getSemiMonthlyForMonth;
function getPaydays(type, startOn, numPaydays = 12, opts) {
startOn = date_fns_1.startOfDay(startOn);
switch (type) {
case "weekly":
return new Array(numPaydays).fill(startOn).map((payday, index) => {
return date_fns_1.addWeeks(payday, index);
});
case "bi_weekly":
return new Array(numPaydays).fill(startOn).map((payday, index) => {
return date_fns_1.addWeeks(payday, index * 2);
});
case "semi_monthly":
return new Array(Math.ceil(numPaydays / 2))
.fill(startOn)
.map((payday, index) => {
return getSemiMonthlyForMonth(date_fns_1.addMonths(payday, index));
})
.reduce((acc, cur) => acc.concat(cur), []);
case "monthly":
if (!opts || !opts.monthly) {
throw new Error("monthly required when providing monthly");
}
const dayOfMonth = opts.monthly;
if (date_fns_1.getDate(startOn) !== dayOfMonth) {
throw new Error("startOn date must match the value provided to opts.monthly");
}
return new Array(numPaydays).fill(startOn).map((payday, index) => {
return date_fns_1.addMonths(payday, index);
});
}
}
exports.getPaydays = getPaydays;
//# sourceMappingURL=payday.js.map