jours-feries-france
Version:
Bibliothèque pour gérer les jours fériés en France
101 lines (100 loc) • 3.38 kB
JavaScript
;
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;