Bonjour,
J'ai un problème assez classique mais je ne trouve pas de solution satisfaisante sur le net. Je souhaite calculer en PHP, la différence entre 2 dates sans compter les jours fériés et Week-ends.
Merci d'avance pour votre aide.
Bonjour,
J'ai un problème assez classique mais je ne trouve pas de solution satisfaisante sur le net. Je souhaite calculer en PHP, la différence entre 2 dates sans compter les jours fériés et Week-ends.
Merci d'avance pour votre aide.
fais en live donc peut etre tout foireux :
la fonction prend en entrée des dates au format anglais aaaa-mm-dd
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 function getJours($datedeb,$datefin){ $nb_jours=0; $dated=explode('-',$datedeb); $datef=explode('-',$datefin); $timestampcurr=mktime(0,0,0,$dated[1],$dated[2],$dated[0]); $timestampf=mktime(0,0,0,$datef[1],$datef[2],$datef[0]); while($timestampcurr<$timestampf){ if((date('w',$timestampcurr)!=0)||(date('w',$timestampcurr)!=6)){ $nb_jours++; } $timestampcurr=(0,0,0,date('m',$timestampcurr),(date('d',$timestampcurr)+1) ,date('Y',$timestampcurr)); } return $nb_jours; }
En corrigeant un peu, ca devrait marcher :
Samedi et Dimanche non compris et date en entrée de la fonction au format anglophone.(mysql).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 <?php function getJours($datedeb,$datefin){ $nb_jours=0; $dated=explode('-',$datedeb); $datef=explode('-',$datefin); $timestampcurr=mktime(0,0,0,$dated[1],$dated[2],$dated[0]); $timestampf=mktime(0,0,0,$datef[1],$datef[2],$datef[0]); while($timestampcurr<$timestampf){ if((date('w',$timestampcurr)!=0)&&(date('w',$timestampcurr)!=6)){ $nb_jours++; } $timestampcurr=mktime(0,0,0,date('m',$timestampcurr),(date('d',$timestampcurr)+1) ,date('Y',$timestampcurr)); } return $nb_jours; } echo getJours('2007-01-01','2008-01-01'); ?>
Excellent ! Merci beaucoup !!
Ça semble fonctionner comme je voulais, pour les jours fériés, je m'en passerai pour l'instant, c pas dramatique pour mon logiciel.
En fait je viens de trouver la fonction "estFerie" sur un site, donc en modifiant juste 1 ligne de ta fonction ça enlève aussi les jours fériés !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 function estFerie($j){ // Détermine si un jour (format Y-m-d) est férié $res=0; // les jours fériés $joursFeries= array("-01-01","-05-01","-05-08","-07-14","-08-15","-11-01","-11-11","-12-25"); for($i=0; $i<count($joursFeries);$i++) if($j==(substr($j,0,4).$joursFeries[$i])) { $res=1; } // Si c'est le lundi de paques if($j== date( "Y-m-d", strtotime("+1 day",easter_date(substr($j,0,4))))) { $res=1; } // ascension if($j== date( "Y-m-d", strtotime("+39 day",easter_date(substr($j,0,4))))) { $res=1; } return $res; }
remplacée par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part if((date('w',$timestampcurr)!=0)&&(date('w',$timestampcurr)!=6)) {
Code : Sélectionner tout - Visualiser dans une fenêtre à part if((date('w',$timestampcurr)!=0)&&(date('w',$timestampcurr)!=6) && estFerie(date('Y-m-d',$timestampcurr))==0 ) {
Bonjour
Je viens d'utiliser ce script pour les jours ouvrés, ça marche nickel, mais quand je rajoute les jours fériés : ça ne marche plus...
J'ai PHP 5.2 et je teste ce script par copier/coller.
quelqu'un aurait-il une idée de ce blocage ?
Si je remplace :
if((date('w',$timestampcurr)!=0)&&(date('w',$timestampcurr)!=6) && estFerie(date('Y-m-d',$timestampcurr))==0 ) {
par
if((date('w',$timestampcurr)!=0)&&(date('w',$timestampcurr)!=6)) {
ça REfonctionne nickel !
quelqu'un aurait-il une idée de ce blocage ?
pour parser ce genre de date c'est strtotime, pareil avec strtotime tu peux rajouter 1 jour
mais il grand temps de passer a PHP 5.3 et d'utiliser date_diff
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 function getJours($datedeb, $datefin) { $nb = 0; $dated = strtotime($datedeb); $datef = strtotime($datefin); while(strtotime("+$nb day", $dated) < $datef) { ++$nb; } return $nb; } echo getJours('2007-01-01', '2008-01-01');
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager