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

JavaScript Discussion :

Fonction qui compte le nombre de jours ouvrés par mois


Sujet :

JavaScript

  1. #1
    Membre actif Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Points : 281
    Points
    281
    Par défaut Fonction qui compte le nombre de jours ouvrés par mois
    Bonjour à tous,
    je suis à la recherche d'une fonction qui me permettrait de pouvoir calculer le nombre de jours ouvrés par mois. C'est a dire que pour un mois donné, la fonction me retourne le nombre de jours où l'on peut travailler. C'est à dire que par exemple pour le mois de juillet qui compte 31 jours, la fonction y enlèvent les samedis, les dimanches ainsi que les jours fériés et retourne ce nombre. Par exemple pour le moi de juillet de cette année la fonction me retourne 20. Il y a 10 Week-end dans le moi plus 1 jour férié donc 31-11=20. Quelqu'un aurait-il une idée s'il vous plaît ? Merci d'avance
    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant.

    http://mosfootball.over-blog.com

  2. #2
    Membre averti Avatar de linar009
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    497
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 497
    Points : 323
    Points
    323
    Par défaut
    Voici une fonction qui te permets de savoir si une date est ouvrée :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    function estOuvre (date) {
     
    	ouvre = true;	
    	if (date.getDay() == 6) { //samedi
    	     ouvre = false;
        } else if (date.getDay() == 0){ //dimanche
           	     ouvre = false;
      	} else if (calcul_joursferies(date.getMonth() + 1, date.getDate(), date.getFullYear()) == true){
     
       		    	 ouvre = false;
       	} else {
       	  	ferie = false;
       	  	for (prop in tab_ferie){
       	   		mois = date.getMonth();mois++;
       	  		jour = date.getDate();
     
       	  		if (mois < 10) mois = "0" + mois;
       	  		if (jour < 10) jour = "0" + jour;
     
       	 		tt = date.getFullYear() + "-" + mois + "-" + jour;
       			if (tt == tab_ferie[prop]){
       	 	   	     		ferie = true;
       	     	}
       		}
       		if (ferie == true){
       		  	ouvre = false;
       		}   			
    	}	
    	return ouvre;		
    }
    Voici le contenu de tab_ferie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    tab_ferie[0] = "2006-07-14";
    tab_ferie[1] = "2006-12-25";
    tab_ferie[2] = "2006-01-01";
    tab_ferie[3] = "2006-08-15";
    tab_ferie[4] = "2006-05-01";
    tab_ferie[5] = "2006-05-08";
    etc.
    et la fonction calcul_joursferies :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    function calcul_joursferies(month, day, year){
      resultat=false;
     
     
      jf1 = year - 1900;
      jf2 = jf1 % 19;
      jf3 = Math.floor((7*jf2+1)/19);
      jf4 = (11*jf2+4-jf3)%29;
      jf5 = Math.floor(jf1/4);
      jf6 = (jf1+jf5+31-jf4)%7;
      jfj = 25 - jf4 - jf6;
      jfm = 4;
      if (jfj<=0){
        jfm=3;
        jfj=jfj+31;
      }
     
      if (jfm < 10) jfm2 = "0" + jfm;
      else jfm2 = jfm;
      if (jfj < 10) jfj2 = "0" + jfj;
      else jfj2 = jfj;
     
      paques = jfm2 + "/" + jfj2;
     
      lunpaq = new Date(year, jfm-1, jfj+1);
      mois = lunpaq.getMonth();mois++;
      if (mois < 10) mois = "0" + mois;
      if (lunpaq.getDate() < 10) jour = "0" + lunpaq.getDate();
      else jour = lunpaq.getDate();
      lunpaq = mois + "/" + jour;
     
      ascension = new Date(year, jfm-1, jfj+39);
      mois = ascension.getMonth();mois++;
      if (mois < 10) mois = "0" + mois;
      if (ascension.getDate() < 10) jour = "0" + ascension.getDate();
      else jour = ascension.getDate();
      ascension = mois + "/" + jour;
     
      if (year < 2005){
        lunpent = new Date(year, jfm-1, jfj+50);
        mois = lunpent.getMonth();mois++;
        if (mois < 10) mois = "0" + mois;
        if (lunpent.getDate() < 10) jour = "0" + lunpent.getDate();
        else jour = lunpent.getDate();
        lunpent = mois + "/" + jour;
      }else{
        lunpent = '';
      }
     
      JourFerie = new Array("01/01","05/01","05/08","07/14","08/15","11/01","11/11","12/25",paques,lunpaq,ascension,lunpent);
      nbj=0;
      val = new Date(year, month-1, day);
      mois = val.getMonth();mois++;
      if (mois < 10) mois = "0" + mois;
      if (val.getDate() < 10) jour = "0" + val.getDate();
      else jour = val.getDate();
      val = mois + "/" + jour;
      while (nbj < JourFerie.length){
        if (JourFerie[nbj]==val){
          resultat=true;
          nbj=15;
        }
        nbj++;
      }
      return(resultat);
    }

  3. #3
    Membre averti Avatar de linar009
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    497
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 497
    Points : 323
    Points
    323
    Par défaut
    Par contre, moi, pour le tableau tab_ferie, j'ai tout dans une base de données... Ca évite de taper toutes les dates en dur dans le prog

  4. #4
    Membre averti Avatar de linar009
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    497
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 497
    Points : 323
    Points
    323
    Par défaut
    Pui une fois que tu as la fonction estOuvre, plus qu'à parcourir toutes les dates du mois avec une boucle du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var compteur = 0;
      while (date.getMonth() == dt.getMonth()) {
         if (estOuvre(dt)) compteur++;
         //...
         dt.setDate(dt.getDate() + 1);  //jour suivant
    }

  5. #5
    Membre actif Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Points : 281
    Points
    281
    Par défaut
    Merci de ton aide. Par contre, j'ai un petit souci. Je passe donc ma date en paramètre de la fonction comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ?>
    <script>estOuvre (<?php echo $date; ?>);</script>
    <?
    Et au début de la fonction estOuvre, je fais un alert (date); . et là, il me retourne toutes les années de 1998 à 1968. Pourquoi, je comprends pas. Alors que je suis certain que la variable $date contient une valeur de type "2006-07-26". Peux tu m'éclairer là dessus ? Merci à toi
    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant.

    http://mosfootball.over-blog.com

  6. #6
    Membre averti Avatar de linar009
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    497
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 497
    Points : 323
    Points
    323
    Par défaut
    Ben le souci c'est que la fonction estOuvre prend une date en paramètre et non un string comme tu le fais (d'ailleurs je me demande même si elle n'interprète pas "2006-7-26" comme la différence de 2006 avec 7 et 26)

    Ce qu'il faudrait que tu fasses c'est un truc du genre temp = new Date (date.substr(0,4),date.substr(5,2), date.substr(8,2));

    En ayant pris soin de passer ta variable date PHP ($date) en une variable JS

  7. #7
    Membre actif Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Points : 281
    Points
    281
    Par défaut
    Oui c'est ça. Par contre, j'ai trouvé une fonction beaucoup plus simple en php. Donc je préfère me rabattre deçu. Merci beaucoup pour ton aide tout de même.
    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant.

    http://mosfootball.over-blog.com

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

Discussions similaires

  1. [AC-2013] Calcul du nombre de jours ouvrés par mois entre deux dates
    Par lumpys dans le forum VBA Access
    Réponses: 7
    Dernier message: 11/04/2014, 09h59
  2. [VBS] Fonction qui compte le nombre de lignes dans un fichier texte
    Par ProgElecT dans le forum Vos Contributions VBScript
    Réponses: 0
    Dernier message: 03/05/2012, 13h48
  3. Réponses: 3
    Dernier message: 19/08/2010, 18h21
  4. [PHP 5.2] Fonction qui retourne le nombre de jours compris entre deux dates
    Par zemzoum89 dans le forum Langage
    Réponses: 2
    Dernier message: 18/05/2010, 20h27
  5. Fonction qui compte le nombre d'éléments.
    Par bakomen dans le forum Débuter
    Réponses: 1
    Dernier message: 12/06/2009, 09h19

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