UNPKG

jours-feries-france

Version:

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

179 lines (178 loc) 6.64 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getJourFerie = getJourFerie; exports.estJourFerie = estJourFerie; exports.isHoliday = isHoliday; exports.getJoursFeriesAnnee = getJoursFeriesAnnee; const joursFeries_1 = __importDefault(require("./joursFeries")); /** * Normalise une date en la mettant à minuit UTC */ function normalizeDate(date) { const year = date.getFullYear(); const month = date.getMonth(); const day = date.getDate(); const normalized = new Date(Date.UTC(year, month, day)); console.log('Normalizing date:', { input: date.toISOString(), output: normalized.toISOString() }); return normalized; } /** * Valide et convertit une chaîne de date en objet Date. * @param dateStr - La date à valider au format YYYY-MM-DD ou DD/MM/YYYY * @returns Date object or null if invalid */ function parseDate(dateStr) { console.log('Parsing date:', dateStr); // Essaye ISO 8601 (YYYY-MM-DD) const isoRegex = /^(\d{4})-(\d{2})-(\d{2})$/; let match = dateStr.match(isoRegex); if (match) { const [, year, month, day] = match; console.log('ISO match:', { year, month, day }); const d = new Date(Date.UTC(parseInt(year), parseInt(month) - 1, parseInt(day))); if (!isNaN(d.getTime())) { console.log('Parsed ISO date:', d.toISOString()); return d; } } // Essaye format français (DD/MM/YYYY) const frRegex = /^(\d{2})\/(\d{2})\/(\d{4})$/; match = dateStr.match(frRegex); if (match) { const [, day, month, year] = match; console.log('FR match:', { day, month, year }); const d = new Date(Date.UTC(parseInt(year), parseInt(month) - 1, parseInt(day))); if (!isNaN(d.getTime())) { console.log('Parsed FR date:', d.toISOString()); return d; } } console.log('Failed to parse date'); return null; } /** * Vérifie si une date donnée est un jour férié en France. * @param date - La date à vérifier (Date, YYYY-MM-DD ou DD/MM/YYYY) * @param options - Options pour inclure les jours fériés régionaux * @returns Un objet contenant les informations du jour férié, ou null si ce n'est pas un jour férié */ function getJourFerie(date, options = {}) { let dateObj; if (typeof date === 'string') { const parsed = parseDate(date); if (!parsed) { throw new Error("Format de date invalide. Formats acceptés : 'YYYY-MM-DD' ou 'DD/MM/YYYY'"); } dateObj = parsed; } else { dateObj = normalizeDate(date); } console.log('Looking for holiday on:', dateObj.toISOString()); const year = dateObj.getUTCFullYear(); const jours = (0, joursFeries_1.default)(year, options); console.log('Available holidays:', jours.map(j => ({ date: j.date.toISOString(), nom: j.nom }))); const targetTime = dateObj.getTime(); const found = jours.find(jour => { const jourTime = normalizeDate(jour.date).getTime(); console.log('Comparing:', { target: new Date(targetTime).toISOString(), holiday: new Date(jourTime).toISOString(), match: jourTime === targetTime }); return jourTime === targetTime; }); console.log('Found holiday:', found); return found || null; } /** * Vérifie si une date donnée est un jour férié en France. * @param date - La date à vérifier (Date, YYYY-MM-DD ou DD/MM/YYYY) * @param options - Options pour inclure les jours fériés régionaux * @returns true si la date est un jour férié, false sinon */ function estJourFerie(date, options = {}) { let dateObj; if (typeof date === 'string') { const parsed = parseDate(date); if (!parsed) { throw new Error("Format de date invalide. Formats acceptés : 'YYYY-MM-DD' ou 'DD/MM/YYYY'"); } dateObj = parsed; } else { dateObj = normalizeDate(date); } const year = dateObj.getUTCFullYear(); const jours = (0, joursFeries_1.default)(year, options); const targetTime = dateObj.getTime(); return jours.some(jour => normalizeDate(jour.date).getTime() === targetTime); } /** * Vérifie rapidement si une date est un jour férié (sans logs) * @param date - La date à vérifier (Date, YYYY-MM-DD ou DD/MM/YYYY) * @param options - Options pour inclure les jours fériés régionaux * @returns true si la date est un jour férié, false sinon */ function isHoliday(date, options = {}) { try { let dateObj; if (typeof date === 'string') { const isoRegex = /^(\d{4})-(\d{2})-(\d{2})$/; const frRegex = /^(\d{2})\/(\d{2})\/(\d{4})$/; let match = date.match(isoRegex); if (match) { const [, year, month, day] = match; dateObj = new Date(Date.UTC(parseInt(year), parseInt(month) - 1, parseInt(day))); } else { match = date.match(frRegex); if (match) { const [, day, month, year] = match; dateObj = new Date(Date.UTC(parseInt(year), parseInt(month) - 1, parseInt(day))); } else { return false; } } if (isNaN(dateObj.getTime())) { return false; } } else { const year = date.getFullYear(); const month = date.getMonth(); const day = date.getDate(); dateObj = new Date(Date.UTC(year, month, day)); } const year = dateObj.getUTCFullYear(); const jours = (0, joursFeries_1.default)(year, options); const targetTime = dateObj.getTime(); return jours.some(jour => { const jourDate = jour.date; const jourTime = new Date(Date.UTC(jourDate.getFullYear(), jourDate.getMonth(), jourDate.getDate())).getTime(); return jourTime === targetTime; }); } catch (_a) { return false; } } /** * Retourne tous les jours fériés pour une année donnée. * @param year - L'année pour laquelle récupérer les jours fériés * @param options - Options pour inclure les jours fériés régionaux * @returns Un tableau des jours fériés */ function getJoursFeriesAnnee(year, options = {}) { return (0, joursFeries_1.default)(year, options); }