×

Please give details of the problem

Skip to content

How to deal with holidays

 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
function getEaster(annee) //renvoie un tableau [jour, mois], mois commence à 0
{  
var g = annee % 19;
var c = Math.floor(annee / 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(annee / 4) + annee + i + 2 + c_4 - c) % 7; //jour de pâque (0=dimanche, 1=lundi....)
var presJour = 28 + i - jourSemaine; //Jour de paque en jours en partant de 1 = 1er mars
var mois = presJour > 31 ? 3 : 2; //mois (0 = janvier, ... 2 = mars, 3 = avril)
var jour = mois == 2 ? presJour : presJour - 31; //jour du mois
var datEaster = new Date(annee, mois, jour);
return datEaster;
};

function IsFeastDay(iDate, iMonth, iYear) {
/*Crette fonction renvoie vrai lorsqu'une date correspond à  un jour férié*/
var datSel = new Date(iYear, iMonth, iDate); //Date du jour à tester
var datEaster = new Date();
datEaster = getEaster(iYear); //Date de Pâques
var datSelUTC = Date.UTC(iYear, datSel.getMonth(), datSel.getDate());
var datEasterUTC = Date.UTC(iYear, datEaster.getMonth(), datEaster.getDat  
());
if (datSelUTC > datEasterUTC) { //Lundi de Pâques, Ascension, Lundi de  
Pentecôte
if ((datSelUTC - datEasterUTC) == 86400000)
return true; // Paques  
if ((datSelUTC - datEasterUTC) == (86400000 * 39))
return true; // Ascension
if ((datSelUTC - datEasterUTC) == (86400000 * 50))
return true; // Pentecote
}
if (iDate == 1 && iMonth == 0)
return true; // Jour de l'an
if (iDate == 1 && iMonth == 4)
return true; //Fête du travail
if (iDate == 8 && iMonth == 4)
return true; //Fête de la victoire du 8 mai 1945
if (iDate == 14 && iMonth == 6)
return true; //Fête nationale
if (iDate == 15 && iMonth == 7)
return true; //Assomption
if (iDate == 1 && iMonth == 10)
return true; //Toussaint
if (iDate == 11 && iMonth == 10)
return true; //Armistice 1918
if (iDate == 25 && iMonth == 11)
return true; //Noël  
};  
function IsWeekEnd(iDate, iMonth, iYear) {
/*Cette fonction renvoie vrai lorsqu'une date correspond à  un samedi ou dimanche*/
var datSel = new Date(iYear, iMonth, iDate); //Date du jour à tester
if (datSel.getDay() == 0)
return true;
if (datSel.getDay() == 6)
return true;    
}

Function to get the nb of days off between two dates

 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
function get_nb_days_off(start_date, end_date, start_date_ampm,end_date_ampm) {
var ijours_conge = (parseInt(end_date) - parseInt(start_date)) / (3600 * 24) + 1;

//alert("jours conge depart: " + ijours_conge);
var ijours_poses = ijours_conge;
var today = new Date();
today.setTime(start_date * 1000);
//alert ("date de debut:" +today.getTime());
//alert("jours poses depart: " + ijours_poses);
var ferie = "false";
var weekend = "false";

for (i = 1; i <= ijours_conge; i++) {
ferie = "false";
weekend = "false";
var ijour = today.getDate();
var imois = today.getMonth();
var iannee = today.getFullYear();
ferie = IsFeastDay(ijour, imois, iannee);
weekend = IsWeekEnd(ijour, imois, iannee);
//alert("on est le : " + ijour +"/"+imois+"/"+ iannee +". ceci est un jour ferie :" +ferie + "ceci est un weekend: " +weekend);
if (ferie || weekend) {
ijours_poses = ijours_poses - 1;
}
today.setTime(today.getTime() + (24 * 60 * 60 * 1000));
}

if (start_date_ampm == "pm")
ijours_poses = ijours_poses - 0.5;
if (end_date_ampm == "pm")
ijours_poses = ijours_poses - 0.5;
if (end_date_ampm == "am")
ijours_poses = ijours_poses - 1;
return ijours_poses;
}