IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Dates] Calcul du nombre de jours ouvrés entre 2 dates


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Points : 37
    Points
    37
    Par défaut [Dates] Calcul du nombre de jours ouvrés entre 2 dates
    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.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Points : 1 504
    Points
    1 504
    Par défaut
    fais en live donc peut etre tout foireux :
    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;
    }
    la fonction prend en entrée des dates au format anglais aaaa-mm-dd

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Points : 1 504
    Points
    1 504
    Par défaut
    En corrigeant un peu, ca devrait marcher :
    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');
    ?>
    Samedi et Dimanche non compris et date en entrée de la fonction au format anglophone.(mysql).

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Points : 37
    Points
    37
    Par défaut
    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.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Points : 37
    Points
    37
    Par défaut
    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;
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if((date('w',$timestampcurr)!=0)&&(date('w',$timestampcurr)!=6)) {
    remplacée par :
    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 ) {

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    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 ?

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par Raideman Voir le message
    En corrigeant un peu, ca devrait marcher :
    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');
    ?>
    Samedi et Dimanche non compris et date en entrée de la fonction au format anglophone.(mysql).
    pour parser ce genre de date c'est strtotime, pareil avec strtotime tu peux rajouter 1 jour

    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');
    mais il grand temps de passer a PHP 5.3 et d'utiliser date_diff

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 12/12/2023, 19h54
  2. [Vxi3] Calcul nombre de jours ouvrés entre 2 dates
    Par Wonsul dans le forum Webi
    Réponses: 2
    Dernier message: 22/04/2013, 16h15
  3. [Dates] calculer le nombre de jour ouvrable entre 2 dates
    Par pimpmyride dans le forum Langage
    Réponses: 1
    Dernier message: 20/11/2006, 17h10
  4. Réponses: 1
    Dernier message: 10/08/2006, 14h43
  5. Nombre de jours ouvrés entre 2 dates
    Par motlerang dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/12/2005, 13h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo