Donnez vie à vos documents numériques !
 

Répondre à : Calcul jours ouvrés entre deux dates. – RÉSOLU

abracadabraPDF Forums PDF – Général Calcul jours ouvrés entre deux dates. – RÉSOLU Répondre à : Calcul jours ouvrés entre deux dates. – RÉSOLU

#53066
RafaelLopes
Membre

Voilà j’ai rajouté les 3 jours fériés mobiles (grâce à des formules trouvés dans wikipedia), j’ai de plus vérifié avec toute une panoplie de test que ça me calculait les bon jours et ça marche bien :) cependant … mon problèmé de jours ouvrés “en trop” n’est pas rélgé et en plus de ça, ces 3 derniers jours fériés ne son pas comptés(Why !?), voila mon script:

/* principe de fonctionnement, on calcule le jour de la semaine de la date de départ, on génère tous les jours fériés des années entre les deux dates, on calcul le nombre de jours hors weekend, on y soustrait les jours fériés hors weekend */
function joursOuvres()
{
var Date1 = new Date(this.getField(“dA”).value,this.getField(“dM”).value-1,this.getField(“dJ”).value);
var Date2 = new Date(this.getField(“fA”).value,this.getField(“fM”).value-1,this.getField(“fJ”).value);
var Date0= new Date(2000, 00, 03); /* Lundi de référence */
var diffA=this.getField(“fA”).value-this.getField(“dA”).value; /* calcule le nombre d’années entre les deux dates pour générer les jours fériés */

ferie= new Array();
for(j=0; j{
ferie[j]= new Array();
ferie[j][0]= new Date(this.getField(“dA”).value+j, 0, 1).getTime();
ferie[j][1]= new Date(this.getField(“dA”).value+j, 4, 1).getTime();
ferie[j][2]= new Date(this.getField(“dA”).value+j, 4, 8).getTime();
ferie[j][3]= new Date(this.getField(“dA”).value+j, 6, 14).getTime();
ferie[j][4]= new Date(this.getField(“dA”).value+j, 7, 15).getTime();
ferie[j][5]= new Date(this.getField(“dA”).value+j, 10, 1).getTime();
ferie[j][6]= new Date(this.getField(“dA”).value+j, 10, 11).getTime();
ferie[j][7]= new Date(this.getField(“dA”).value+j, 11, 25).getTime();
var g = (this.getField(“dA”).value+j) % 19;
var c = Math.floor((this.getField(“dA”).value+j) / 100);
var c_4 = Math.floor(c / 4);
var h = (19 * g + c – c_4 – Math.floor((8 * c + 13) / 25) + 15) % 30;
var k = Math.floor(h / 28);
var i = (k * Math.floor(29 / (h + 1)) * Math.floor((21 – g) / 11) – 1) * k + h;
var jourSemaine = (Math.floor( (this.getField(“dA”).value+j) / 4) +  (this.getField(“dA”).value+j) + i + 2 + c_4 – c) % 7; //jour de Pâques (0=dimanche, 1=lundi….)
var presJour = 28 + i – jourSemaine;            //Jour de Pâques en jours en partant de 1 = 1er mars
var moisP=0;
var jourP=0;
if(presJour>31) {moisP=3;}
else{moisP=2;}
if(mois==2) {jourP=presJour;}
else{jourP=presJour – 31;}
var dPacques= new Date(this.getField(“dA”).value+j, moisP, jourP).getTime();
ferie[j][8]= dPacques+(1000*60*60*24);
ferie[j][9]= ferie[j][8]+(38*(1000*60*60*24));
ferie[j][10]=ferie[j][8]+(49*(1000*60*60*24));
}/* génération des jours fériés, pour Pacques et les 2 autres jours mobiles je me suis servi de formules trouvés sur le net */
index=1;
var Date11=Date1.getTime();
var Date22=Date2.getTime();
var Date00=Date0.getTime();

if(Date00{
  for(i=Date00; i  {
      if(index<7)
      { index+=1;}
      else if(index>6)
      {
      index=1;
      }
  }/* permet de savoir le jour de la semaine de la date de départ en se servant du lundi de référence */
var index2=index;
this.getField(“jO”).value=0;

  for(i=Date11; i  {
      if(index      {
        this.getField(“jO”).value+=1;
        index+=1;
        }

      else if(index<7)
      {
      index+=1;
      }
      else if(index>6)
      {
      index=1;
      }

  } /* compte le nombre de jours hors weekend entre les deux dates */

for(i=Date11; i  {
if(index2 {
for(j=0; j { for(g=0; g {if(i==ferie[j][g])
{this.getField(“jO”).value-=1;}
}}
index2+=1;
}
else if(index2<7){index2+=1;}
else if(index2>6){ index2=1;}
}/* exclue les jours fériés hors weekend du nombre de jours hors hors weekend calculé précédemment */
}

}

Du coup théoriquement c’est fini et ça devrait marcher(enfin selon moi  :Smiley08:) … mais en pratique pas vraiment, je me demande bien où est le problème :/