Fonction de calcul de jours fériés

Soyez le premier à donner votre avis sur cette source.

Snippet vu 19 757 fois - Téléchargée 28 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

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

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

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

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.

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)