Week Number

  • This is a Version 2 script.
  • This script does not take daylight saving time into account. This means that for half the year, for half an hour per week the script will be incorrect. I solved this problem by assuming that no one fills in contact forms in summer near midnight in the night from Saturday to Sunday.
  •  

    When I was making contact forms for our corporate website, someone came up with this script. I simplified it greatly and now use it to fill in the week number in the contact form, as an extra bit of service. "Please contact me in week ".

    The computer week goes from Sunday (day 0) to Saturday (day 6).

    The script

    function getWeekNr()
    {
    	var today = new Date();
    	Year = takeYear(today);
    	Month = today.getMonth();
    	Day = today.getDate();
    	now = Date.UTC(Year,Month,Day+1,0,0,0);
    	var Firstday = new Date();
    	Firstday.setYear(Year);
    	Firstday.setMonth(0);
    	Firstday.setDate(1);
    	then = Date.UTC(Year,0,1,0,0,0);
    	var Compensation = Firstday.getDay();
    	if (Compensation > 3) Compensation -= 4;
    	else Compensation += 3;
    	NumberOfWeek =  Math.round((((now-then)/86400000)+Compensation)/7);
    	return NumberOfWeek;
    }
    
    
    function takeYear(theDate)
    {
    	x = theDate.getYear();
    	var y = x % 100;
    	y += (y < 38) ? 2000 : 1900;
    	return y;
    }
    

    Now getWeekNr() returns the week number and I fill it in in the form:

    Please contact me in week

    Of course the user should be able to fill in a week number, but as a service we offer him the number of the current week.

    I create an

    <INPUT SIZE=2 NAME="weeknr">
    

    and do

    <BODY etc. onLoad="document.forms[0].weeknr.value=getWeekNr()">
    

    Explanation

    The purpose of most of the script is to see how many days have passed since 1 Janaury of the current year.

    Today

    First I need to know what date it is right now. I create a Date object. This is required for any date and time calculation.

    var today = new Date();
    

    Then I see what day, month and year it is. To calculate the year, I use the function detailed on the Introduction page.

    Year = takeYear(today);
    Month = today.getMonth();
    Day = today.getDate();
    

    Then I convert the day to Epoch Time with the Date.UTC method. (See the Introduction page for more details on this method).

    now = Date.UTC(Year,Month,Day+1,0,0,0);
    
    First day

    Then I create Firstday, a new Date object containing the first day of the year. (See again the Introduction page for more details on these methods).

    var Firstday = new Date();
    Firstday.setYear(Year);
    Firstday.setMonth(0);
    Firstday.setDate(1);
    

    Then I calculate the Epoch Time of 1 January CurrentYear.

    then = Date.UTC(Year,0,1,0,0,0);
    
    Compensation

    Then we come to the variable Compensation. I found out that you need this variable and have by trial and error written the bit of script below. I first take the day number of 1 January CurrentYear (0 = Sunday, 6 = Saturday) and then subtract 4 if the day number is larger than 3. If it isn't, I add 3.

    var Compensation = Firstday.getDay();
    if (Compensation > 3) Compensation -= 4;
    else Compensation += 3;
    
    Calculate

    Then we do the real calculating. First the number of milliseconds elapsed since 1 January CurrentYear:

    now-then
    

    Convert to days by dividing it by 86,400,000 (the number of milliseconds in 1 day):

    (now-then)/86400000
    

    Add Compensation for whatever reason.

    ((now-then)/86400000)+Compensation
    

    Divide by 7 and round, which gives NumberOfWeek. This is now returned to whatever script asked for it.

    NumberOfWeek =  Math.round((((now-then)/86400000)+Compensation)/7);
    return NumberOfWeek;
    

    If you understand this script better than I do or if you see a mistake, please tell me what I'm doing (wrong).

    Home