CALCULE DES JOURS OUVRÉS + JOURS FERIÉS

sensoide
Messages postés
102
Date d'inscription
mardi 17 janvier 2006
Statut
Membre
Dernière intervention
1 août 2007
- 21 juil. 2006 à 17:23
psykoose
Messages postés
2
Date d'inscription
samedi 20 mars 2010
Statut
Membre
Dernière intervention
14 mai 2012
- 14 mai 2012 à 16:22
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/38707-calcule-des-jours-ouvres-jours-feries

psykoose
Messages postés
2
Date d'inscription
samedi 20 mars 2010
Statut
Membre
Dernière intervention
14 mai 2012

14 mai 2012 à 16:22
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.
JackSample
Messages postés
1
Date d'inscription
dimanche 31 décembre 2006
Statut
Membre
Dernière intervention
31 décembre 2006

31 déc. 2006 à 21:25
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
griese
Messages postés
139
Date d'inscription
dimanche 9 mai 2004
Statut
Membre
Dernière intervention
27 février 2008

27 juil. 2006 à 15:19
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...
kiki2sirom
Messages postés
153
Date d'inscription
mardi 17 août 2004
Statut
Membre
Dernière intervention
23 décembre 2010

25 juil. 2006 à 11:58
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
cs_trashouille
Messages postés
1
Date d'inscription
samedi 1 février 2003
Statut
Membre
Dernière intervention
25 juillet 2006

25 juil. 2006 à 10:52
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.
Afficher les 8 commentaires