## 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:

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.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
```

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