UNPKG

swedish-salary-day

Version:

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

85 lines (65 loc) 2.23 kB
// Bundled with Packemon: https://packemon.dev // Platform: browser, Support: stable, Format: lib 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); const seBankHolidays = require('se-bank-holidays'); // Config for which day const defaultConfig = { dayOfMonth: 25, resolveSaturday: 'previous-work-day', resolveSunday: 'previous-work-day', isHoliday: seBankHolidays.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; } exports.nextSalaryDay = nextSalaryDay; exports.previousSalaryDay = previousSalaryDay; //# sourceMappingURL=index.js.map