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.

v1.4.0 2022-06-08 08:02 UTC

This package is auto-updated.

Last update: 2024-12-08 13:44:08 UTC


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.