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
Bonjour,J’ouvre un nouveau sujet concernant cette question bien qu’il en à déjà été discuté sur le topic suivant : http://abracadabrapdf.net/forum/index.php/topic,1624.0.html
[Edit du modo : les sujets ont été déplacés et ré-ordonnés)
Voila mon script fait maison permettant de calculer le nombre de jours ouvrés entre deux dates. Pour l’instant il ne gère pas les jours fériés qui changent de dates chaque année(type Paques).
function joursOuvres()
{
var Date1 = new Date(this.getField(“dA”).value,this.getField(“dM”).value-1,this.getField(“dJ”).value); /* récupération du jours, mois et année dans les champs correspondant */
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 qui permettra de connaitre le jour de la date de départ */
var diffA=this.getField(“fA”).value-this.getField(“dA”).value; /* calcule la différence d’années entre la date de départ et la date de fin, cette variable sera ensuite utilisée pour “générer” les jours fériés de chaque année. */
ferie= new Array();
for(j=0; j<=diffA; 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, .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();
} /* création des jours fériés dans des tableaux imbriqués */
index=1; /* initialisation de l’index(jour actuel), index=1 signifie qu’on est lundi */
var Date11=Date1.getTime();
var Date22=Date2.getTime();
var Date00=Date0.getTime(); /* conversion des dates dans un format exploitable */
if(Date00
for(i=Date00; i<=Date11; i=i+(1000*60*60*24))
{
if(index<7)
{ index+=1;}
else if(index>6)
{
index=1;
}
} */ permet de connaitre le jour de la date de départ */
var index2=index;
this.getField(“jO”).value=0;
for(i=Date11; i<=Date22; i=i+(1000*60*60*24))
{
if(index<=5)
{
this.getField(“jO”).value+=1;
index+=1;
}
else if(index<7)
{
index+=1;
}
else if(index>6)
{
index=1;
}
} /* calcul des jouurs hors weekend */
for(i=Date11; i<=Date22; i=i+(1000*60*60*24))
{
if(index2<=5)
{
for(j=0; j<=diffA; j++)
{ for(g=0; g<=ferie[j].length; 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;}
} /* on soustrait les jours féries entre les deux dates au nombre de jours ouvres, seulement s’ils sont dans la semaine */
}
}
Voilà où j’en suis, j’étais persuadé que ça marcherait parfaitement, or j’observe des écarts lorsque je fais le calcul sur une année entière. En 2012 j’ai par exemple 258 jours ouvrés alors qu’il y’en a réellement 250. Sachant que je prend pas encore compte dans mon script des jours feries qui change (comme Pacques) je devrais arriver à 255, j’ai donc 5 jours ouvres en trop et je dois admettre que je ne comprend absolument par où se situe le problème, quelqu’un aurait une idée?
Merci d’avance