156 lines
6.3 KiB
JavaScript
156 lines
6.3 KiB
JavaScript
/**
|
|
* NRW Public Holidays Provider
|
|
* Provides holidays for NRW (Nordrhein-Westfalen) from 2025-2030
|
|
*/
|
|
class HolidayProvider {
|
|
constructor() {
|
|
this.holidays = this.initializeHolidays();
|
|
}
|
|
|
|
initializeHolidays() {
|
|
return {
|
|
2025: [
|
|
{ date: '2025-01-01', name: 'Neujahr' },
|
|
{ date: '2025-04-18', name: 'Karfreitag' },
|
|
{ date: '2025-04-21', name: 'Ostermontag' },
|
|
{ date: '2025-05-01', name: 'Tag der Arbeit' },
|
|
{ date: '2025-05-29', name: 'Christi Himmelfahrt' },
|
|
{ date: '2025-06-09', name: 'Pfingstmontag' },
|
|
{ date: '2025-06-19', name: 'Fronleichnam' },
|
|
{ date: '2025-10-03', name: 'Tag der Deutschen Einheit' },
|
|
{ date: '2025-11-01', name: 'Allerheiligen' },
|
|
{ date: '2025-12-25', name: '1. Weihnachtstag' },
|
|
{ date: '2025-12-26', name: '2. Weihnachtstag' }
|
|
],
|
|
2026: [
|
|
{ date: '2026-01-01', name: 'Neujahr' },
|
|
{ date: '2026-04-03', name: 'Karfreitag' },
|
|
{ date: '2026-04-06', name: 'Ostermontag' },
|
|
{ date: '2026-05-01', name: 'Tag der Arbeit' },
|
|
{ date: '2026-05-14', name: 'Christi Himmelfahrt' },
|
|
{ date: '2026-05-25', name: 'Pfingstmontag' },
|
|
{ date: '2026-06-04', name: 'Fronleichnam' },
|
|
{ date: '2026-10-03', name: 'Tag der Deutschen Einheit' },
|
|
{ date: '2026-11-01', name: 'Allerheiligen' },
|
|
{ date: '2026-12-25', name: '1. Weihnachtstag' },
|
|
{ date: '2026-12-26', name: '2. Weihnachtstag' }
|
|
],
|
|
2027: [
|
|
{ date: '2027-01-01', name: 'Neujahr' },
|
|
{ date: '2027-03-26', name: 'Karfreitag' },
|
|
{ date: '2027-03-29', name: 'Ostermontag' },
|
|
{ date: '2027-05-01', name: 'Tag der Arbeit' },
|
|
{ date: '2027-05-06', name: 'Christi Himmelfahrt' },
|
|
{ date: '2027-05-17', name: 'Pfingstmontag' },
|
|
{ date: '2027-05-27', name: 'Fronleichnam' },
|
|
{ date: '2027-10-03', name: 'Tag der Deutschen Einheit' },
|
|
{ date: '2027-11-01', name: 'Allerheiligen' },
|
|
{ date: '2027-12-25', name: '1. Weihnachtstag' },
|
|
{ date: '2027-12-26', name: '2. Weihnachtstag' }
|
|
],
|
|
2028: [
|
|
{ date: '2028-01-01', name: 'Neujahr' },
|
|
{ date: '2028-04-14', name: 'Karfreitag' },
|
|
{ date: '2028-04-17', name: 'Ostermontag' },
|
|
{ date: '2028-05-01', name: 'Tag der Arbeit' },
|
|
{ date: '2028-05-25', name: 'Christi Himmelfahrt' },
|
|
{ date: '2028-06-05', name: 'Pfingstmontag' },
|
|
{ date: '2028-06-15', name: 'Fronleichnam' },
|
|
{ date: '2028-10-03', name: 'Tag der Deutschen Einheit' },
|
|
{ date: '2028-11-01', name: 'Allerheiligen' },
|
|
{ date: '2028-12-25', name: '1. Weihnachtstag' },
|
|
{ date: '2028-12-26', name: '2. Weihnachtstag' }
|
|
],
|
|
2029: [
|
|
{ date: '2029-01-01', name: 'Neujahr' },
|
|
{ date: '2029-03-30', name: 'Karfreitag' },
|
|
{ date: '2029-04-02', name: 'Ostermontag' },
|
|
{ date: '2029-05-01', name: 'Tag der Arbeit' },
|
|
{ date: '2029-05-10', name: 'Christi Himmelfahrt' },
|
|
{ date: '2029-05-21', name: 'Pfingstmontag' },
|
|
{ date: '2029-05-31', name: 'Fronleichnam' },
|
|
{ date: '2029-10-03', name: 'Tag der Deutschen Einheit' },
|
|
{ date: '2029-11-01', name: 'Allerheiligen' },
|
|
{ date: '2029-12-25', name: '1. Weihnachtstag' },
|
|
{ date: '2029-12-26', name: '2. Weihnachtstag' }
|
|
],
|
|
2030: [
|
|
{ date: '2030-01-01', name: 'Neujahr' },
|
|
{ date: '2030-04-19', name: 'Karfreitag' },
|
|
{ date: '2030-04-22', name: 'Ostermontag' },
|
|
{ date: '2030-05-01', name: 'Tag der Arbeit' },
|
|
{ date: '2030-05-30', name: 'Christi Himmelfahrt' },
|
|
{ date: '2030-06-10', name: 'Pfingstmontag' },
|
|
{ date: '2030-06-20', name: 'Fronleichnam' },
|
|
{ date: '2030-10-03', name: 'Tag der Deutschen Einheit' },
|
|
{ date: '2030-11-01', name: 'Allerheiligen' },
|
|
{ date: '2030-12-25', name: '1. Weihnachtstag' },
|
|
{ date: '2030-12-26', name: '2. Weihnachtstag' }
|
|
]
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Check if a given date is a public holiday
|
|
* @param {Date} date - Date to check
|
|
* @returns {boolean}
|
|
*/
|
|
isHoliday(date) {
|
|
const year = date.getFullYear();
|
|
const dateStr = this.formatDate(date);
|
|
|
|
if (!this.holidays[year]) return false;
|
|
|
|
return this.holidays[year].some(h => h.date === dateStr);
|
|
}
|
|
|
|
/**
|
|
* Check if a given date is the day before a public holiday
|
|
* @param {Date} date - Date to check
|
|
* @returns {boolean}
|
|
*/
|
|
isDayBeforeHoliday(date) {
|
|
const nextDay = new Date(date);
|
|
nextDay.setDate(nextDay.getDate() + 1);
|
|
return this.isHoliday(nextDay);
|
|
}
|
|
|
|
/**
|
|
* Get holiday name for a given date (if it is a holiday)
|
|
* @param {Date} date - Date to check
|
|
* @returns {string|null}
|
|
*/
|
|
getHolidayName(date) {
|
|
const year = date.getFullYear();
|
|
const dateStr = this.formatDate(date);
|
|
|
|
if (!this.holidays[year]) return null;
|
|
|
|
const holiday = this.holidays[year].find(h => h.date === dateStr);
|
|
return holiday ? holiday.name : null;
|
|
}
|
|
|
|
/**
|
|
* Format date as YYYY-MM-DD
|
|
* @param {Date} date
|
|
* @returns {string}
|
|
*/
|
|
formatDate(date) {
|
|
const year = date.getFullYear();
|
|
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
const day = String(date.getDate()).padStart(2, '0');
|
|
return `${year}-${month}-${day}`;
|
|
}
|
|
|
|
/**
|
|
* Get all holidays for a specific year
|
|
* @param {number} year
|
|
* @returns {Array}
|
|
*/
|
|
getHolidaysForYear(year) {
|
|
return this.holidays[year] || [];
|
|
}
|
|
}
|
|
|
|
// Make it available globally
|
|
window.HolidayProvider = HolidayProvider;
|