Fonction de calcul de jours fériés

3/5 (11 avis)

Snippet vu 21 498 fois - Téléchargée 30 fois

Contenu du snippet

Cette fonction renvoie le nombre de jours fériés de samedis et de dimanches entre 2 dates

Source / Exemple :


<?

// SERVANT AU CALCUL DES JOURS OUVRABLES
// Fonction retournant le nombre de jour fériés samedis et 
// dimanches entre 2 dates entrées en timestamp
function jour_ferie($timestampStart, $timestampEnd)
{ 
 	
	// Initialisation de la date de début
	$jour = date("d", $timestampStart); 
  	$mois = date("m", $timestampStart); 
  	$annee = date("Y", $timestampStart); 
	$nbFerie = 0;
	while ($timestampStart != $timestampEnd)
	{	
		
	  	// Définition des dates fériées fixes
		if($jour == 1 && $mois == 1) $nbFerie++; // 1er janvier 
		if($jour == 1 && $mois == 5) $nbFerie++; // 1er mai 
		if($jour == 8 && $mois == 5) $nbFerie++; // 5 mai 
		if($jour == 14 && $mois == 7) $nbFerie++; // 14 juillet 
		if($jour == 15 && $mois == 8) $nbFerie++; // 15 aout 
		if($jour == 1 && $mois == 11) $nbFerie++; // 1 novembre 
		if($jour == 11 && $mois == 11) $nbFerie++; // 11 novembre 
		if($jour == 25 && $mois == 12) $nbFerie++; // 25 décembre 
	  
	  	// Calcul du jour de pâques
		$date_paques = easter_date($annee); 
	  	$jour_paques = date("d", $date_paques); 
	  	$mois_paques = date("m", $date_paques); 
	  	if($jour_paques == $jour && $mois_paques == $mois) $nbFerie++; 
	  	// Pâques 
	  
	  	// Calcul du jour de l ascension (38 jours après Paques)
	  	$date_ascension = mktime(date("H", $date_paques), 
	  	date("i", $date_paques), 
	  	date("s", $date_paques), 
	  	date("m", $date_paques), 
	  	date("d", $date_paques) + 38, 
	  	date("Y", $date_paques) 
	  	); 
	  	$jour_ascension = date("d", $date_ascension); 
	  	$mois_ascension = date("m", $date_ascension); 
	  	if($jour_ascension == $jour && $mois_ascension == $mois) $nbFerie++; 
	  	//Ascension 
	  
	  	// Calcul de Pentecôte (11 jours après Paques)
		$date_pentecote = mktime(date("H", $date_ascension), 
	  	date("i", $date_ascension), 
	  	date("s", $date_ascension), 
	  	date("m", $date_ascension), 
	  	date("d", $date_ascension) + 11, 
	  	date("Y", $date_ascension) 
	  	); 
	  	$jour_pentecote = date("d", $date_pentecote); 
	  	$mois_pentecote = date("m", $date_pentecote); 
	  	if($jour_pentecote == $jour && $mois_pentecote == $mois) $nbFerie++; 
	  	//Pentecote 
	  
	  	// Calul des samedis et dimanches
		$jour_julien = unixtojd($timestampStart); 
	  	$jour_semaine = jddayofweek($jour_julien, 0); 
	  	if($jour_semaine == 0 || $jour_semaine == 6) $nbFerie++; 
	  	//Samedi (6) et dimanche (0)
	  
	  	// Incrémentation du nombre de jour ( on avance dans la boucle)
	  	$jour++;
	  	$timestampStart=mktime(0,0,0,$mois,$jour,$annee); 
	
	}
	  
	  return $nbFerie; 
	  
}//Fin de la fonction
		
	
?>

A voir également

Ajouter un commentaire Commentaires
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.
Afficher les 11 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (nagrom_om)