wyzen-packages / jours-feries-france
This lightweight PHP library provides simple methods to find all French public holidays đ«đ· (even those specific to territories, such as from Alsace-Moselle, or from France d'Outre-Mer) ; calculate dates in working days, "dĂ©lai franc" etc.
Requires
- php: >=7.4.0
Requires (Dev)
- phpunit/phpunit: ^9
- squizlabs/php_codesniffer: ^3.6
README
Cette bibliothéque PHP propose des méthodes simples pour :
- retrouver l'ensemble des Jours FĂ©riĂ©s Français đ«đ· (mĂȘme ceux spĂ©cifiques Ă des territoires, tel que l'Alsace-Moselle, ou la France d'Outre-Mer) ;
- effectuer des calculs de dates en jours ouvrés, ouvrables, tout en tenant compte des jours fériés du territoire spécifié ;
- calculer un "délai franc administratif" ;
- ⊠et bien d'autres surprises !
TrĂšs trĂšs (trĂšs) inspirĂ© de https://github.com/etalab/jours-feries-france (mais en PHP, et avec quelques bonus utiles) âïž
Usage de la classe JoursFeries
// Obtenir les jours fériés pour une année, pour la métropole Française
$Jours = JoursFeries::forYear(2018);
// $Jours = [
// 'Jour de lâan' => new DateTime('01-01-2018'),
// 'Lundi de PĂąques' => new DateTime('02-04-2018'),
// 'FĂȘte du Travail' => new DateTime('01-05-2018'),
// 'Victoire de 1945' => new DateTime('08-05-2018'),
// 'Ascension' => new DateTime('10-05-2018'),
// 'Lundi de PentecĂŽte' => new DateTime('21-05-2018'),
// 'FĂȘte Nationale' => new DateTime('14-07-2018'),
// 'Assomption' => new DateTime('15-08-2018'),
// 'Toussaint' => new DateTime('01-11-2018'),
// 'Armistice' => new DateTime('11-11-2018'),
// 'Jour de Noël' => new DateTime('25-12-2018'),
// ]
// Méthode spécifique pour obtenir certains jours fériés (en DateTime) :
echo JoursFeries::lundiPaques(2018); // => new DateTime('02-04-2018')
echo JoursFeries::ascension(2018); // new DateTime('10-05-2018')
echo JoursFeries::lundiPentecote(2018); // new DateTime('21-05-2018')
// Obtenir les jours fériés pour une zone spécifique
$Jours = JoursFeries::forYear(2018, "Alsace-Moselle");
# Quelques fonctions pratiques :
JoursFeries::isFerie(new DateTime("25-12-2019"), "MĂ©tropole"); // => True
JoursFeries::getNextFerie(new DateTime("24-12-2019"),"MĂ©tropole"); // => new DateTime("25-12-2019")
Usage de la classe JoursAdministratifs
(calculs des délais)
// Obtenir la date correspondante Ă 10 jours calendaires Ă partir d'aujourd'hui
JoursAdministratifs::addJourCalendaire(new DateTime(), 10);
// Obtenir la date correspondante Ă 10 jours ouvrables Ă partir d'aujourd'hui
JoursAdministratifs::addJourOuvrable(new DateTime(), 10);
// Obtenir la date correspondante à 8 jours ouvrés à partir d'aujourd'hui
JoursAdministratifs::addJourOuvre(new DateTime(), 8);
// Obtenir la date correspondante d'il y a 10 jours ouvrés à partir d'aujourd'hui (dans le passé donc)
JoursAdministratifs::subJourOuvre(new DateTime(), 10);
// Obtenir la date correspondante Ă 10 jours ouvrables aprĂšs le 20/12/2017, en Alsasce-Moselle
JoursAdministratifs::addJourOuvrable(new DateTime('20-12-2017'), 10, 'Alsace-Moselle');
// Obtenir un délai franc, c'est à dire 10 jours calendaires à partir du 14/12/2020,
// mais si le dernier jour n'est pas ouvré, alors on renverra le prochain jour ouvré
// voir https://www.attestis.com/calculateur-de-delai-franc/
JoursAdministratifs::addJourFranc(new DateTime('14-12-2020'), 10);
TO DO AND KNOWN ISSUES
Ajouter un fichier .gitlab-ci.yml et automatiser les tests dans gitlab-ci
La méthode
JoursAdministratifs::subJourFranc()
n'existe pas. Pourquoi ? Car la fin de délai correspond au prochain jour ouvré, de ce fait, le calcul de la date d'origine va rester flou / aléatoire si plusieurs jours non-ouvrés se suivent en fin de délai ! Si je cherche la date correspondante au début d'un délai franc de 10 jours, se terminant le 31 Déc. 2020, un lundi donc, dont les jours précédents sont respectivement un dimanche, un samedi et un vendredi de Noël. La date de début du délai est imprécise et délicate à calculer car elle peut correspondre au 15 Déc., au 16 Déc, au 17 Déc ou encore au 18 Déc. ! Un solution serait de demander le délai "max" ou le délai "min". Voyons si un jour cette méthode est nécessaire.