UNPKG

swedish-holidays-ts

Version:

Typescript library for calculating the date of all swedish holidays for any given year.

97 lines (96 loc) 5.75 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getHolidays = exports.getUpcomingHolidays = exports.isPublicHoliday = exports.isHoliday = exports.getPublicHoliday = exports.getHoliday = exports.language = void 0; const lang_1 = require("./lang"); const lib_1 = require("./lib"); const FRIDAY = 5; const SUNDAY = 0; exports.language = lang_1.swedishHolidayNames; const getHoliday = (date = new Date(), language) => { const holidays = (0, exports.getHolidays)(date.getFullYear(), language); return holidays.find((holiday) => holiday.day === date.getDate() && holiday.month === date.getMonth() + 1 && holiday.year === date.getFullYear()); }; exports.getHoliday = getHoliday; const getPublicHoliday = (date = new Date(), language) => { if (date.getDay() === SUNDAY) { return (0, lib_1.getHolidayJSON)(lang_1.sunday, date, true); } const holidays = (0, exports.getHolidays)(date.getFullYear(), language); return holidays.find((holiday) => holiday.day === date.getDate() && holiday.month === date.getMonth() + 1 && holiday.year === date.getFullYear() && holiday.isPublicHoliday); }; exports.getPublicHoliday = getPublicHoliday; const isHoliday = (date, language) => Boolean((0, exports.getHoliday)(date, language)); exports.isHoliday = isHoliday; const isPublicHoliday = (date, language) => Boolean((0, exports.getPublicHoliday)(date, language)); exports.isPublicHoliday = isPublicHoliday; const getUpcomingHolidays = (language) => { const now = new Date(); const nextYear = (0, lib_1.addYears)(now, 1); return (0, exports.getHolidays)(now.getFullYear(), language) .concat((0, exports.getHolidays)(nextYear.getFullYear(), language)) .filter((holiday) => holiday.date.getTime() >= now.getTime() && holiday.date.getTime() < nextYear.getTime()); }; exports.getUpcomingHolidays = getUpcomingHolidays; const getHolidays = (year = new Date().getFullYear(), language = lang_1.swedishHolidayNames) => { const holidays = []; if (year >= 1582 && year <= 8702) { const goldenNumber = Math.floor((year % 19) + 1); const century = Math.floor(year / 100 + 1); const corx = Math.floor((3 * century) / 4 - 12); const corz = Math.floor((8 * century + 5) / 25 - 5); const sunday = Math.floor((5 * year) / 4 - corx - 10); let epact = Math.floor((11 * goldenNumber + 20 + corz - corx + 30) % 30); if ((epact === 25 && goldenNumber > 11) || epact === 24) { epact += 1; } let moon = 44 - epact; if (moon < 21) { moon += 30; } moon = moon + 7 - ((sunday + moon) % 7); let month = 3; let day = moon; if (moon > 31) { month = 4; day = moon - 31; } const easterSunday = (0, lib_1.fixedDate)(year, month, day); const christSkyFly = (0, lib_1.addDays)((0, lib_1.addWeeks)(easterSunday, 6), -3); const pingst = (0, lib_1.addWeeks)(easterSunday, 7); holidays.push((0, lib_1.getHolidayJSON)(language.maundyThursday, (0, lib_1.addDays)(easterSunday, -3))); holidays.push((0, lib_1.getHolidayJSON)(language.goodFriday, (0, lib_1.addDays)(easterSunday, -2), true)); holidays.push((0, lib_1.getHolidayJSON)(language.holySaturday, (0, lib_1.addDays)(easterSunday, -1))); holidays.push((0, lib_1.getHolidayJSON)(language.easterSunday, easterSunday, true)); holidays.push((0, lib_1.getHolidayJSON)(language.easterMonday, (0, lib_1.addDays)(easterSunday, 1), true)); holidays.push((0, lib_1.getHolidayJSON)(language.ascensionDay, christSkyFly, true)); holidays.push((0, lib_1.getHolidayJSON)(language.pentecostEve, (0, lib_1.addDays)(pingst, -1))); holidays.push((0, lib_1.getHolidayJSON)(language.whitSunday, pingst, true)); } const midsummerEve = (0, lib_1.firstOfWeekdayAfterDate)(FRIDAY, (0, lib_1.fixedDate)(year, 6, 19)); const midsummerDay = (0, lib_1.addDays)(midsummerEve, 1); holidays.push((0, lib_1.getHolidayJSON)(language.midsummerEve, midsummerEve)); holidays.push((0, lib_1.getHolidayJSON)(language.midsummerDay, midsummerDay, true)); const allSaintsEve = (0, lib_1.firstOfWeekdayAfterDate)(FRIDAY, (0, lib_1.fixedDate)(year, 10, 30)); holidays.push((0, lib_1.getHolidayJSON)(language.allSaintsEve, allSaintsEve)); holidays.push((0, lib_1.getHolidayJSON)(language.allSaintsDay, (0, lib_1.addDays)(allSaintsEve, 1), true)); holidays.push((0, lib_1.getHolidayJSON)(language.newYearsDay, (0, lib_1.fixedDate)(year, 1, 1), true)); holidays.push((0, lib_1.getHolidayJSON)(language.twelfthNight, (0, lib_1.fixedDate)(year, 1, 5))); holidays.push((0, lib_1.getHolidayJSON)(language.epiphany, (0, lib_1.fixedDate)(year, 1, 6), true)); holidays.push((0, lib_1.getHolidayJSON)(language.walpurgisNight, (0, lib_1.fixedDate)(year, 4, 30))); holidays.push((0, lib_1.getHolidayJSON)(language.mayFirst, (0, lib_1.fixedDate)(year, 5, 1), true)); holidays.push((0, lib_1.getHolidayJSON)(language.swedishNationalDay, (0, lib_1.fixedDate)(year, 6, 6), true)); holidays.push((0, lib_1.getHolidayJSON)(language.christmasEve, (0, lib_1.fixedDate)(year, 12, 24))); holidays.push((0, lib_1.getHolidayJSON)(language.christmasDay, (0, lib_1.fixedDate)(year, 12, 25), true)); holidays.push((0, lib_1.getHolidayJSON)(language.boxingDay, (0, lib_1.fixedDate)(year, 12, 26), true)); holidays.push((0, lib_1.getHolidayJSON)(language.newYearsEve, (0, lib_1.fixedDate)(year, 12, 31))); return holidays.sort((a, b) => { return a.date.getTime() - b.date.getTime(); }); }; exports.getHolidays = getHolidays;