poland-public-holidays
Version:
compute dates of public holidays in Poland
57 lines (50 loc) • 1.46 kB
text/typescript
import {
isSameDay,
addDays,
getEasterDate,
validateDate,
validateYear,
} from './helpers';
import holidayRules from './holidays';
import { Holiday } from './types';
export function getHolidaysInYear(year: any): Holiday[] {
const yearDate = validateYear(year);
const yearString = yearDate.getFullYear().toString().padStart(4, '0');
const yearNumber = parseInt(yearString);
const easterDate = getEasterDate(yearNumber);
return holidayRules
.map((holiday) => {
let date;
if (holiday.type === 'fixed') {
date = new Date(`${yearString}-${holiday.date}`);
} else {
date = new Date(addDays(easterDate, holiday.afterEaster));
}
const { name, namePL } = holiday;
return {
name,
namePL,
date,
};
})
.sort((a, b) => (a.date < b.date ? -1 : 1));
}
export function getHolidayOnDate(dateInput: any) {
const date = validateDate(dateInput);
return getHolidaysInYear(date.getFullYear()).find((holiday) =>
isSameDay(holiday.date, date)
);
}
export function isHoliday(dateInput: any) {
const date = validateDate(dateInput);
return getHolidayOnDate(date) !== undefined;
}
export function isWeekend(date: Date): boolean {
return [0, 6].includes(date.getDay());
}
export function isWeekendOrHoliday(date: Date): boolean {
return isWeekend(date) || isHoliday(date);
}
export function isWorkingDay(date: Date): boolean {
return !isWeekendOrHoliday(date);
}