Calcule des jours ouvrés + jours feriés

Contenu du snippet

Ce code vous permet de calculer le nombre de samedi et de dimanche entre deux dates.
Mais il y ajoute aussi les jours fériés, pour obtenir au final le nombre de jours ouvrés.
C'est un code éxistant que j'ai modifié par ce qu'il manquait de precision.
Par ce que si un jour férié tombait un dimanche il était comptabiliser deux fois.
Alors que la il ne le serat plus qu'une fois.
Dite mois ce que vous pensez de ce source, c'est le premier que je publie.
Merci.

Source / Exemple :


<?php
//ECRIT PAR NANOGROM_OM
//MODIFIE PAR AYTAC GUNTAC
//LE 21/07/2006

$date_debutCP = '01/09/2006' ;
$date_finCP = '31/09/2006' ;

function NbJours($date_debutCP, $date_finCP)
{
  $tDeb = explode("/", $date_debutCP);
  $tFin = explode("/", $date_finCP);

  $diff = mktime(0, 0, 0, $tFin[1], $tFin[0], $tFin[2]) -
          mktime(0, 0, 0, $tDeb[1], $tDeb[0], $tDeb[2]);

  return(($diff / 86400)+1);

}

  $tDeb = explode("/", $date_debutCP);
  $tFin = explode("/", $date_finCP);

  $timestampEnd = mktime(0, 0, 0, $tFin[1], $tFin[0], $tFin[2]);
  $timestampStart = mktime(0, 0, 0, $tDeb[1], $tDeb[0], $tDeb[2]);

// 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;
    $nbFerie2 = 0;
    while ($timestampStart <= $timestampEnd)
    {
			// 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)
			}

				/*CECI A ETE RAJOUTE PAR MES SOINS*/

			if($jour_semaine == 1||$jour_semaine == 2||$jour_semaine == 3||$jour_semaine == 4||$jour_semaine == 5)
			{
         // Définition des dates fériées fixes
        if($jour == 01 && $mois == 01) $nbFerie2++; // 1er janvier
        if($jour == 01 && $mois == 05) $nbFerie2++; // 1er mai
        if($jour == 08 && $mois == 05) $nbFerie2++; // 5 mai
        if($jour == 14 && $mois == 07) $nbFerie2++; // 14 juillet
        if($jour == 15 && $mois == 08) $nbFerie2++; // 15 aout
        if($jour == 01 && $mois == 11) $nbFerie2++; // 1 novembre
        if($jour == 11 && $mois == 11) $nbFerie2++; // 11 novembre
        if($jour == 25 && $mois == 12) $nbFerie2++; // 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) $nbFerie2++;
         // 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) + 39,
         date("Y", $date_paques)
         );
         $jour_ascension = date("d", $date_ascension);
         $mois_ascension = date("m", $date_ascension);
         if($jour_ascension == $jour && $mois_ascension == $mois) $nbFerie2++;
         //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) $nbFerie2++;
         //Pentecote
			}

			$jour++;
			$timestampStart=mktime(0,0,0,$mois,$jour,$annee);
			$nbJour = ($timestampEnd - $timestampStart / (60*60*24));
         // Incrémentation du nombre de jour ( on avance dans la boucle)
    }
     return $nbFerie+$nbFerie2;
}//Fin de la fonction

$a=NbJours($date_debutCP, $date_finCP);
$b=jour_ferie($timestampStart, $timestampEnd);
$testcp = round( $a - $b , 0);

echo 'Ouvert : '.$testcp.'</br> NBjour : '.$a.'</br> NBferié : '.$b;
?>

A voir également

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.