begin process at 2012 05 27 22:00:29
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Date / Heure

 > CALCULE DES JOURS OUVRÉS + JOURS FERIÉS

CALCULE DES JOURS OUVRÉS + JOURS FERIÉS


 Description

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

  • <?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;
  • ?>
<?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;
?>



 Sources de la même categorie

Source avec une capture AGENDA GRAPHIQUE SIMPLE (DÉBUTANT) À INTÉGRER par NicomakM
CALCUL DU NOMBRE DE JOURS CONTENUS DANS L'INTERSECTION DE DE... par curphey
CALENDRIER EN 70 LIGNES par tchconst
Source avec Zip CALENDRIER par gabay
CALENDRIER SIMPLE par manuche

 Sources en rapport avec celle ci

CALCUL SIMPLE DU NOMBRE DE JOURS OUVRÉS ENTRE DEUX DATES (JO... par Astemius
Source avec Zip FORMULAIRE DE CONGÉS AVEC CALCUL DES JOURS OUVRÉS par Akita95

Commentaires et avis

Commentaire de sensoide le 21/07/2006 17:23:00

Juste un oublie de ma part mais je pense que vous l'auriez corrigez par vous méme.
$date_finCP = '31/09/2006' ;
a remplacez par
$date_finCP = '30/09/2006' ;
et oui il n'y a que 30 jours en septembre :-)

Commentaire de guill76 le 22/07/2006 11:28:17

Plusieurs choses :
1 - Pourquoi ne stocke tu pas dans un tableau paramétrable tes jours fériés:
Imagine que le gouvernement décide de supprimer un jour ferié (déjà vu)ou d'octroyer(très peu probable) un jour férié supplémenentaire, il te faudra alors modifier ton script(peu souple).
2 - La ligne suivante me derange:
if($jour_semaine == 1||$jour_semaine == 2||$jour_semaine == 3||$jour_semaine == 4||$jour_semaine == 5) (c'est strictement la condition complémentaire à ta première donc un else suffit et évite toute depense inutile de ton proc serveur).
3 - Initié? bof tu serais pas un peu prétentieux par hasard?

Commentaire de guill76 le 22/07/2006 11:34:27

Pour le 1 de mes remarques j'ai oublié: un tableau permettrait en plus de gérer les jours fériés de plusieurs pays (car les jours fériés français ne sont ceux fériés en allemagne, US ou autres)

Commentaire de trashouille le 25/07/2006 10:52:08

pas mal, cependant le + 11 pour la pentecote me choque un peu. si paques tombes un 30, la pentecôte tomberait un 41 ?? Idem pour l'ascension 38 jours apres paques.
je te conseille un truc du genre
$jourAscension=date("d",$date_ascension);
$datePaques=explode("-",date("n-d", mktime(0, 0, 0, $moisAscension, $jourAscension+11, date("Y"))));
jour=" . $datePaques[1]

je dis ca mais je n'ai pas testé ton code mais je suppose que si tu l'as mis en ligne, c'est que ça doit marcher.

Commentaire de kiki2sirom le 25/07/2006 11:58:47

avec :

$date_debutCP = '30/01/2006' ;
$date_finCP = '08/10/2006' ;

problème avec NBjour; le rajout d'un petit round dans le return de la fonction n'arrangerait pas la chose ?

Ouvert : 180
NBjour : 251.95833333333
NBferié : 72

* déjà on ne dit pas 'ouvert', mais 'ouvré'
* c'aurait été mieux de séparer les jours fériés, et les samedis et dimanches, non ?

voilà pour les qq petites remarques (constructives ? je ne sais pas)

cdt

kiki

Commentaire de griese le 27/07/2006 15:19:56

Merci pour cette fonction qui m'est du grand secours. J'ai une petite remarque concernant le jour de paques. En fait, la fonction calcule bien le jour de paques. Mais le jour de paques donc toujours un dimanche. Donc il est automatiquement férié. Par contre, le lundi de paques est férié. Donc il faut rajouter +1 à la ligne 67 ce qui donne :
$jour_paques = date("d", $date_paques)+1;
Voila sinon j'ai un souci avec, c'est que pour le mois d'aout 2006, il me retourne 23 jours ouvrés alors qu'il devrait y avoir 22. Bizarre...

Commentaire de JackSample le 31/12/2006 21:25:42

Voir les adaptations que j'ai faites sur ce code pour qu'il fonctionne, j'espère correctement :

// ---> added by mir : 2006.12.31

//ECRIT PAR NANOGROM_OM
//MODIFIE PAR AYTAC GUNTAC
//LE 21/07/2006
  
function mir__elapsed_days($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);

}
  
// 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 mir__holidays($date_debutCP, $date_finCP,$valeur_retour)
{
$tDeb = explode("/", $date_debutCP);
$tFin = explode("/", $date_finCP);  

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

    // Initialisation de la date de début
    $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)
            }
            else
            {
     $jour = date("d", $timestampStart);
     $mois = date("m", $timestampStart);
        $annee = date("Y", $timestampStart);
       
         // 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 == 21 && $mois == 07) $nbFerie2++; // 21 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 Lundi de Pâques (1er jour après Pâques)
         $date_paques = $date_paques + 86400;
         $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 (39ème jour après Pâques)
   $date_ascension = $date_paques + (39 * 86400);
         $jour_ascension = date("d", $date_ascension);
         $mois_ascension = date("m", $date_ascension);
         if($jour_ascension == $jour && $mois_ascension == $mois) $nbFerie2++;
         // Ascension

         // Calcul du jour de la Pentecôte (49ème jour après Pâques)
   $date_pentecote = $date_paques + (49 * 86400);
         $jour_pentecote = date("d", $date_pentecote);
         $mois_pentecote = date("m", $date_pentecote);
         if($jour_pentecote == $jour && $mois_pentecote == $mois) $nbFerie2++;
         // Pentecote
  
         // Calcul du Lundi de la Pentecôte (1er jour après Pentecôte)
   $date_pentecote = $date_pentecote + (86400);
         $jour_pentecote = date("d", $date_pentecote);
         $mois_pentecote = date("m", $date_pentecote);
         if($jour_pentecote == $jour && $mois_pentecote == $mois) $nbFerie2++;
         // Lundi de la Pentecôte
  
            }
  
            $timestampStart=$timestampStart+86400;
    }
   switch ($valeur_retour)
{
case '1':
{
return $nbFerie;
break;
}
case '2':
{
return $nbFerie2;
break;
}
default:
{
     return $nbFerie+$nbFerie2;
     break;
     }
    }
}//Fin de la fonction

Commentaire de psykoose le 14/05/2012 16:22:44

je ne sait pas pourquoi mais le code proposé par JackSample est pas mauvais, mais a un problème lorsque le jours ferié est le 08 du mois, idem avec le 09 du mois.
étrange.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Différence de date - jours ouvrés [ par cacoun ] Bonjour &#224; tous,Je n'ai pas trouv&#233; la r&#233;ponse &#224; ma question dans le forum.Voil&#224;, je voudrais calculer le nombre de jours ouvr&


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,499 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales