Voor het berekenen van het aantal dagen tussen een begin- en einddatum maak ik gebruik van JavaScript. Het is de bedoeling dat deze dagen worden gesplitst naar het dagnummer (dus 0 = zondag, 1 = maandag enz.). De code die ik bedacht heb, is:
Bovenstaande code impliceert een urenrooster, voor elke dag tussen begin- en einddatum wordt het totaal aantal uren verhoogd met de waarde uit de bijbehorende array fte.
Als ik een tijdsinterval pak tussen 01-04-2002 en 05-04-2002 wordt de berekening foutloos uitgevoerd. Kies ik de periode tussen 29-03-2002 en 01-04-2002 dan kom ik in een oneindige lus terecht. De periode tussen 29-04-2002 en 02-05-2002 wordt daarentegen ook weer probleemloos uitgevoerd. Wat heb ik verkeerd gedaan.
code:
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
| <script language="Javascript">
<!--
function datum(strDat){
I = strDat.indexOf('-');
J = strDat.lastIndexOf('-');
strDag = strDat.substring(0,I);
strMaand = strDat.substring(I+1,J);
strJaar = strDat.substring(J+1);
return(new Date(strJaar,strMaand-1,strDag,00,00,00));
}
function add_days(adate,days) {
return new Date(adate.getTime() + (days * 86400000));
}
function Calc_nUur(){
var fte = new Array(6);
fte[0] = 0;
fte[1] = 4;
fte[2] = 4;
fte[3] = 4;
fte[4] = 4;
fte[5] = 4;
fte[6] = 0;
var Datum = datum(document.forms[0].Begindatum.value);
var EindDatum = datum(document.forms[0].Einddatum.value);
EindDatum = add_days(EindDatum,1);
nUur = 0;
while(Datum.toString() != EindDatum.toString()){
nUur = nUur + fte[Datum.getDay()];
Datum = add_days(Datum,1);
}
document.forms[0].AantalUur.value = nUur;
}
//-->
</script> |
Bovenstaande code impliceert een urenrooster, voor elke dag tussen begin- en einddatum wordt het totaal aantal uren verhoogd met de waarde uit de bijbehorende array fte.
Als ik een tijdsinterval pak tussen 01-04-2002 en 05-04-2002 wordt de berekening foutloos uitgevoerd. Kies ik de periode tussen 29-03-2002 en 01-04-2002 dan kom ik in een oneindige lus terecht. De periode tussen 29-04-2002 en 02-05-2002 wordt daarentegen ook weer probleemloos uitgevoerd. Wat heb ik verkeerd gedaan.