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