UNPKG

jours-feries-france

Version:

Bibliothèque pour gérer les jours fériés en France

101 lines (100 loc) 3.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getJoursFeries = getJoursFeries; const JOURS_FERIES_FIXES = { '01-01': 'Jour de l\'an', '05-01': 'Fête du Travail', '05-08': 'Victoire 1945', '07-14': 'Fête nationale', '08-15': 'Assomption', '11-01': 'Toussaint', '11-11': 'Armistice', '12-25': 'Noël' }; const JOURS_FERIES_ALSACE_MOSELLE = { '12-26': 'Saint-Étienne', 'vendredi-saint': 'Vendredi Saint' }; function createUTCDate(year, month, day) { const date = new Date(Date.UTC(year, month - 1, day)); date.setUTCHours(0, 0, 0, 0); return date; } function getPaques(year) { const f = Math.floor; const G = year % 19; const C = f(year / 100); const H = (C - f(C / 4) - f((8 * C + 13) / 25) + 19 * G + 15) % 30; const I = H - f(H / 28) * (1 - f(29 / (H + 1)) * f((21 - G) / 11)); const J = (year + f(year / 4) + I + 2 - C + f(C / 4)) % 7; const L = I - J; const month = 3 + f((L + 40) / 44); const day = L + 28 - 31 * f(month / 4); return createUTCDate(year, month, day); } function addDays(date, days) { const newDate = new Date(date.getTime()); newDate.setUTCDate(newDate.getUTCDate() + days); return newDate; } function getJoursFeriesMobiles(year, options = {}) { const paques = getPaques(year); const jours = [ { date: addDays(paques, 1), nom: 'Lundi de Pâques', isRegional: false }, { date: addDays(paques, 39), nom: 'Ascension', isRegional: false }, { date: addDays(paques, 50), nom: 'Lundi de Pentecôte', isRegional: false } ]; // Ajouter les jours fériés spécifiques à l'Alsace-Moselle if (options.includeRegional && (!options.region || options.region === 'Alsace-Moselle')) { jours.push({ date: addDays(paques, -2), // Vendredi Saint nom: JOURS_FERIES_ALSACE_MOSELLE['vendredi-saint'], isRegional: true, regions: ['Alsace-Moselle'] }); } return jours; } function getJoursFeries(year, options = {}) { const jours = []; // Ajouter les jours fériés fixes for (const [date, nom] of Object.entries(JOURS_FERIES_FIXES)) { const [month, day] = date.split('-').map(Number); jours.push({ date: createUTCDate(year, month, day), nom, isRegional: false }); } // Ajouter les jours fériés mobiles jours.push(...getJoursFeriesMobiles(year, options)); // Ajouter les jours fériés régionaux fixes if (options.includeRegional && (!options.region || options.region === 'Alsace-Moselle')) { for (const [date, nom] of Object.entries(JOURS_FERIES_ALSACE_MOSELLE)) { if (date === 'vendredi-saint') continue; // Déjà géré dans getJoursFeriesMobiles const [month, day] = date.split('-').map(Number); jours.push({ date: createUTCDate(year, month, day), nom, isRegional: true, regions: ['Alsace-Moselle'] }); } } // Trier les jours par date return jours.sort((a, b) => a.date.getTime() - b.date.getTime()); } exports.default = getJoursFeries;