UNPKG

@jonstuebe/allot-utils

Version:

Util functions for Allot

73 lines 2.69 kB
"use strict"; 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