FONCTION DE CALCUL DE JOURS FÉRIÉS

cs_jeca Messages postés 341 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 14 juillet 2011 - 29 juin 2005 à 11:38
 Trenyture - 14 févr. 2018 à 12:48
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/32388-fonction-de-calcul-de-jours-feries

Je suis tombé sur ta fonction qui est pas mal, mais je voulais partagé la mienne. Je devais calculer les jours fériés fixes et non fixes depuis 2008 jusqu'à l'année actuelle ... voici donc ma fonction :
/*Retourne tous les jours fériés fixes et non fixes depuis 2000 jusqu'à l'année en cours (paques, ascension et pentecote) sous forme d'array*/
private function getHolidays(){
 /*Jours fériés fixes*/
 $holidayDays = ['*-01-01', '*-05-01', '*-05-08', '*-07-14', '*-08-15', '*-11-01', '*-11-11', '*-12-25'];
 /*Depuis 2008 jusqu'a l'année en cours*/
 for ($i=2008; $i <= intval(date('Y')); $i++) { 
  //Calcul du lundi de pâques
  $paques = date('Y-m-d', strtotime(date('Y-m-d', easter_date($i)).'+1days'));
  //Calcul du jeudi de l'ascension (38 jours après paques)
  $ascension = date('Y-m-d', strtotime($paques.'+38days'));
  //Calcul du lundi de pentecôte (11 jours après ascension)
  $pentecote = date('Y-m-d', strtotime($ascension.'+11days'));
  /* On pousse le tout dans le tableau*/
  array_push($holidayDays, $paques, $ascension, $pentecote);
 }
 /*On envoie le tableau*/
 return $holidayDays;
}
ahmedshaiek Messages postés 2 Date d'inscription samedi 13 juin 2009 Statut Membre Dernière intervention 30 juin 2011
30 juin 2011 à 12:26
vous pouvez m aider comment je peut calculer combien de jour fériée qui vienne successive parais une date de fin pour savoir la prochaine de retour o travaille tenir conte des weekend sachant quel le week-end seulement le dimanche samedi et un jour de travaille
ex si en ai le 02/07/2011 sachant que le 03/07/20011 et un dimanche 04/07/2011 et 05/07/2011 sont des jour fériée alors le résulta sa sera 3 jour de repos
merci de votre aide
sensoide Messages postés 102 Date d'inscription mardi 17 janvier 2006 Statut Membre Dernière intervention 1 août 2007
21 juil. 2006 à 13:30
Au faite sur ce code il y a comme qui dirait un gros bug!!
Par ce que si l'un des jours fériés de l'année tombe un samedi ou un dimanche, bah il sera compté deux fois. Ce qui forcement va fausser le résultat final.

Me trompes-je? J'attends vos réponse et un correctif si possible.
Merci
nagrom_om Messages postés 163 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 1 novembre 2006
30 juin 2005 à 16:42
Genre du 31/07/2005 au 01/08/2005 je trouve 0 jours ouvrables. Alors que je devrais en avoir 2 ... Alors que du 01/06/2005 au 02/06/2005 j ai bien 2 jours ouvrables.

Si qq1 a une idée je le remercie d'avance
nagrom_om Messages postés 163 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 1 novembre 2006
30 juin 2005 à 16:36
Merci pour vos remarques. J'ai encore un probleme. En fait je pense que ca vient des années bisextiles.

$nbJour = ($timestamp_retour-$timestamp_depart/(60*60*24);
$nbJourOuvrable = $nbJour - jour_ferie($timestamp_depart,$timestamp_retour);

J ai utilisé un floor pour arrondir mais le probleme c'est que sur une difference de plusieurs années la fonctions zappe des jours.

De plus je crois que la fonction deconne également sur le passage d'un mois à l'autre il y a des erreurs de calcul.
cs_jeca Messages postés 341 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 14 juillet 2011 14
29 juin 2005 à 16:51
Il y a 2 bugs.

Cette ligne :
while ($timestampStart != $timestampEnd)
doit être remplacée par :
while ($timestampStart <= $timestampEnd)
car si $timestampEnd correspond à un jour férié, ce n'est pas pris en compte.

Si l'on est à cheval su 2 années, le 1er janvier n'est pas pris en compte car l'incrémentation de $jour fait qu'il vaut 32.
willinfeo Messages postés 55 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 4 décembre 2005
29 juin 2005 à 15:58
Ok t'as raison, mais alors ne dit pas que l'ascension est 40 jours apres Paques !!!!!!!!
cs_jeca Messages postés 341 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 14 juillet 2011 14
29 juin 2005 à 14:50
C'est bien 39 jours qu'il faut ajouter et non pas 40
cs_jeca Messages postés 341 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 14 juillet 2011 14
29 juin 2005 à 14:44
C'est 39 jours et non pas 40
willinfeo Messages postés 55 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 4 décembre 2005
29 juin 2005 à 14:32
Salut,
easter_date retourne la date du dimanche de Paques, donc pour le lundi de Paques ajoute 1 jour, l'ascension est 40 jours apres le dimanche de Paques donc il faut ajouter ni 39 ni 38 mais 40. La pentecote est bien 11 jour apres l'ascension, donc ca sera juste quand la date de l'ascension le sera. (attention au commentaire: t'as mis que la pentecote etait 11 jours apres paques).
cs_jeca Messages postés 341 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 14 juillet 2011 14
29 juin 2005 à 11:38
Bonjour,

Il y a une petite erreur dans le calcul du jour de l'Ascension : cette fête se situe 40 jours après Pâques, il faut donc ajouter 39 jours et non 38.
Rejoignez-nous