UNPKG

swedish-salary-day

Version:

Calculate the next or previous salary payout date according to configured rules.

75 lines (58 loc) 1.99 kB
import { isHoliday } from 'se-bank-holidays'; // Config for which day const defaultConfig = { dayOfMonth: 25, resolveSaturday: 'previous-work-day', resolveSunday: 'previous-work-day', isHoliday: isHoliday }; function nextSalaryDay(referenceDate, config = defaultConfig) { if (typeof referenceDate === 'number') { // eslint-disable-next-line no-param-reassign referenceDate = new Date(referenceDate); } let salaryDay = new Date(referenceDate.getFullYear(), referenceDate.getMonth(), config.dayOfMonth + 1); salaryDay.setUTCMinutes(0); salaryDay.setUTCHours(0); if (referenceDate > salaryDay) { salaryDay.setMonth(salaryDay.getMonth() + 1); salaryDay.setUTCMinutes(0); salaryDay.setUTCHours(0); } salaryDay = setSalaryDay(salaryDay, config); return salaryDay; } function previousSalaryDay(referenceDate, config = defaultConfig) { if (typeof referenceDate === 'number') { // eslint-disable-next-line no-param-reassign referenceDate = new Date(referenceDate); } let salaryDay = new Date(referenceDate.getFullYear(), referenceDate.getMonth(), config.dayOfMonth + 1); salaryDay.setUTCMinutes(0); salaryDay.setUTCHours(0); if (referenceDate < salaryDay) { salaryDay.setMonth(salaryDay.getMonth() - 1); salaryDay.setUTCMinutes(0); salaryDay.setUTCHours(0); } salaryDay = setSalaryDay(salaryDay, config); return salaryDay; } const SATURDAY = 6; const SUNDAY = 0; function setSalaryDay(date, config) { const dayOfWeek = date.getDay(); if (dayOfWeek === SATURDAY) { date.setDate(date.getDate() + (config.resolveSaturday === 'previous-work-day' ? -1 : 2)); } if (dayOfWeek === SUNDAY) { date.setDate(date.getDate() + (config.resolveSunday === 'previous-work-day' ? -2 : 1)); } if (config.isHoliday) { while (config.isHoliday(date)) { date.setDate(date.getDate() - 1); } } return date; } export { nextSalaryDay, previousSalaryDay }; //# sourceMappingURL=index2.mjs.map