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
JavaScript
;
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;