Calcul du nombre de jours ouvrables

Contenu du snippet

Code permettant de calculer à partir de la date du jour (possibilité de changer le code pour accepter une autre date) et du nombre de jour ouvrable voulu(ici 15 (cpt_j < 16)) la date à partir de laquelle il est possible de.
--->Prends en compte les jours feries.
Ex: on est le 5 septembre + 15 jours ouvrables = 26 septembre 2003.

Source / Exemple :


function JoursFeries (an){
  var JourAn = new Date(an, "00", "01");
  var FeteTravail = new Date(an, "04", "01");
  var Victoire1945 = new Date(an, "04", "08");
  var FeteNationale = new Date(an,"06", "14");
  var Assomption = new Date(an, "07", "15");
  var Toussaint = new Date(an, "10", "01");
  var Armistice = new Date(an, "10", "11");
  var Noel = new Date(an, "11", "25");
  //**var SaintEtienne = new Date(an, "11", "26");**//

  var G = an%19;
  var C = Math.floor(an/100);
  var H = (C - Math.floor(C/4) - Math.floor((8*C+13)/25) + 19*G + 15)%30;
  var I = H - Math.floor(H/28)*(1 - Math.floor(H/28)*Math.floor(29/(H + 1))*Math.floor((21 - G)/11));
  var J = (an*1 + Math.floor(an/4) + I + 2 - C + Math.floor(C/4))%7;
  var L = I - J;
  var MoisPaques = 3 + Math.floor((L + 40)/44);
  var JourPaques = L + 28 - 31*Math.floor(MoisPaques/4);
  var Paques = new Date(an, MoisPaques-1, JourPaques);
  //**var VendrediSaint = new Date(an, MoisPaques-1, JourPaques-2);**//
  var LundiPaques = new Date(an, MoisPaques-1, JourPaques+1);
  var Ascension = new Date(an, MoisPaques-1, JourPaques+39);
  var Pentecote = new Date(an, MoisPaques-1, JourPaques+49);
  var LundiPentecote = new Date(an, MoisPaques-1, JourPaques+50);

  //**SaintEtienne et Vendredi Saint sont des fêtes exclusivement**//
  //**alscacienne. On les ignore dans notre cas.**//
  return new Array(JourAn, Paques, LundiPaques, FeteTravail, Victoire1945, Ascension, Pentecote, LundiPentecote, FeteNationale, Assomption, Toussaint, Armistice, Noel);
}

//******************************************************************************************************************************//
//************************Calcul de la date minimum de portage (15 jours ouvrables après la date du jour)***********************//
//******************************************************************************************************************************//
function calc_date_mini(){

	var date_now = new Date();
	var date_now_annee = date_now.getFullYear();
	var date_now_mois = date_now.getMonth();
	var date_now_jour = date_now.getDate();

	//**init. des compteurs**//
	var cpt_i = 0;
	var cpt_j = 0;
	var cpt_k = 0;

	//**init. des tableaux récupérant les jours feries de l'annee en cours et de l'annee suivante.**//
	var tab_1=new Array;
	var tab_2=new Array;
	tab_1=JoursFeries(date_now.getFullYear());
	tab_2=JoursFeries(date_now.getFullYear()+1);

	for(cpt_i=0; cpt_j < 16 ; cpt_i++) {
		var date_eval = new Date(date_now_annee, date_now_mois, date_now_jour+cpt_i);
		var day_date_eval = date_eval.getDay();
		if((day_date_eval != 6) && (day_date_eval != 0)) {
			cpt_j++;
			for(cpt_k = 0; cpt_k <13; cpt_k++){
				if(date_eval.getMonth() == tab_1[cpt_k].getMonth() && date_eval.getFullYear() == tab_1[cpt_k].getFullYear() && date_eval.getDate() == tab_1[cpt_k].getDate()){
					cpt_j--;
					break;
				}
				if(date_eval.getMonth() == tab_2[cpt_k].getMonth() && date_eval.getFullYear() == tab_2[cpt_k].getFullYear() && date_eval.getDate() == tab_2[cpt_k].getDate()){
					cpt_j--;
					break;
				}
			}
		}
	}
	return date_eval;
}

//******************************************************************************************************************************//
//************************Fonction de vérification si une date entrée est au de^là de la date minimum***************************//
//******************************************************************************************************************************//
function verif_date_mini(date_entree, date_mini){
	var date_entree_n = new Date(date_entree);
	var date_mini_n = new Date(date_mini);

	if (date_entree_n != "") {
	//**Transformation d'une date en jj/mm/aaaa en mm/jj/aaaa puis en date :Fri Sep 5 15:14:41 UTC+0200 2003)**//
		date_entree_jour = date_entree.substring(0,2);
 		date_entree_mois= date_entree.substring(3,5);
 		date_entree_annee = date_entree.substring(6,10);
 		nouvelle_date_entree = new Date(date_entree_annee, date_entree_mois-1, date_entree_jour);

		if (nouvelle_date_entree.getTime()<date_mini_n.getTime()) {
			return 0;
		}
		else {
		return 1;
		}
	}
}
//************************Fin du code de JORRY Julien***************************************************************************//

A voir également