na vrijdag weeknummer + 1

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • pascal-drewes
  • Registratie: Oktober 2012
  • Laatst online: 16:10
Hallo allemaal,

Ik heb bezig met een rooster achtig iets en heb daarvoor het week nummer nodig.
Dat krijg ik doodmiddel van "WeekOfYear(new Date)" op te roepen.
De code:
JavaScript:
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
Date.prototype.getWeek = function (dowOffset) {
/*getWeek() was developed by Nick Baicoianu at MeanFreePath: http://www.meanfreepath.com */

dowOffset = typeof(dowOffset) == 'int' ? dowOffset : 0; //default dowOffset to zero
var newYear = new Date(this.getFullYear(),0,1);
var day = newYear.getDay() - dowOffset; //the day of week the year begins on
day = (day >= 0 ? day : day + 7);
var daynum = Math.floor((this.getTime() - newYear.getTime() -
(this.getTimezoneOffset()-newYear.getTimezoneOffset())*60000)/86400000) + 1;
var weeknum;
//if the year starts before the middle of a week
if(day < 4) {
weeknum = Math.floor((daynum+day-1)/7) + 1;
if(weeknum > 52) {
nYear = new Date(this.getFullYear() + 1,0,1);
nday = nYear.getDay() - dowOffset;
nday = nday >= 0 ? nday : nday + 7;
/*if the next year starts before the middle of
the week, it is week #1 of that year*/
weeknum = nday < 4 ? 1 : 53;
}
}
else {
weeknum = Math.floor((daynum+day-1)/7);
}
return weeknum;
};

function WeekOfYear(mydate)
{
 var w = mydate.getWeek(1);
 return(w);
}


Nu is het alleen zo dat hij na vrijdag 16:00 alvast naar het volgende weeknummer moet gaan.
En ik kan wel een beetje javascript maar dit gaat mijn petje te boven.
Kan iemand mij uitleggen hoe ik dit moet doen?

Alvast bedankt.

Drenthe, geschakelde woning bj. 1981, 107m2, kruipruimte nageisoleerd, origneel dubbelglas, 6x radiator 19kW@70/55/20, beneden 10x heatfan 5 pro, Tado, Remeha Calenta 28C, Quatt (15-02-2024), 10x Sunpower 390W op Zuid, SMA SB 3.6


Acties:
  • 0 Henk 'm!

  • daniels1989
  • Registratie: September 2012
  • Laatst online: 01-06 00:31
Je zou je "WeekOfYear" kunnen veranderen in


JavaScript:
1
2
3
4
5
6
7
8
9
function WeekOfYear(mydate) 
{ 
    var w = mydate.getWeek(1);
    if(mydate.getDay() == 6 || (mydate.getDay() == 5 && mydate.getHours() >= 16))
    {
        w++;
    }
    return(w); 
} 


Dit controleert of het zaterdag is (mydate.getDay() == 6) of dat het vrijdag na 16:00 uur is (mydate.getDay() == 5 && mydate.getHours() >= 16). Is dat zo dan wordt het weeknummer w 1 keer verhoogt (w++).

Acties:
  • 0 Henk 'm!

  • Klaasvaak
  • Registratie: Maart 2010
  • Laatst online: 23-06 20:16
Zo gaat het mis eind december.
Het volgende zou moeten werken. De functie getRoosterWeek kijkt of het huidige tijdstip na vrijdag 16:00 ligt. Zoja, dan geeft hij de ISO-week van de maandag erop, anders de ISO-week van die vrijdag zelf

JavaScript:
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
Date.prototype.getMDay = function() {
 return (this.getDay() + 6) %7;
};
Date.prototype.getISOYear = function() {
 var thu = new Date(this.getFullYear(), this.getMonth(), this.getDate()+3-this.getMDay());
 return thu.getFullYear();
};
Date.prototype.getISOWeek = function() {
 var onejan = new Date(this.getISOYear(),0,1);
 var wk = Math.ceil((((this - onejan) / 86400000) + onejan.getMDay()+1)/7);
 if (onejan.getMDay() > 3) wk--;return wk;
};

Date.prototype.getRoosterWeek = function() {
 var fri1600 = new Date(this.getFullYear(), this.getMonth(), this.getDate()+4-this.getMDay(), 16);
 if(this.getTime() >= fri1600){
  fri1600.setDate(fri1600.getDate() + 3);
 };
 return fri1600.getISOWeek();
};

Date.prototype.getRoosterYear = function() {
 var fri1600 = new Date(this.getFullYear(), this.getMonth(), this.getDate()+4-this.getMDay(), 16)
 if(this.getTime() >= fri1600){
  fri1600.setDate(fri1600.getDate() + 3);
 };
 return fri1600.getISOYear();
};

var d0 = new Date(2013, 11, 27, 15);
var d1 = new Date(2013, 11, 27, 16);
document.write(d0.getRoosterWeek() +' _ '+ d0.getRoosterYear() +'<br>');
document.write(d1.getRoosterWeek() +' _ '+ d1.getRoosterYear() +'<br>');