|
The 3rd Saturday in November
You are here: irt.org | Articles | JavaScript | Date and Time | The 3rd Saturday in November
Published on: Saturday 22nd November 1997 By: Martin Webb
Introduction
This article will describe how to calculate the 1st, 2nd, 3rd, 4th, 5th and last weekdays of any month.
This will then be used to calculate the dates of various variable Calendar Events or Holidays.
The nth day of the month
Using the DayOfWeek() function described in the previous article
Born on the 4th of July we can create the following NthDay()
function to return the date of the nth weekday within the month of the
year:
function NthDay(nth,weekday,month,year) {
return (nth-1)*7 + 1 + (7 + weekday - DayOfWeek((nth-1)*7 + 1,month,year))%7;
}
|
For example:
document.write(NthDay(3,7,11,1997)+'<BR>');
|
When run produces the date of the 3rd Saturday in November for 1997:
The last day of the month
Using the makeArray() and LeapYear() functions and the daysofmonth[] and
daysofmonthLY[] arrays, described in the previous article Blind Date,
using the number of days within the month we can find the date of the last
weekday within the month of the year using the LastDay() function:
function LastDay(weekday,month,year) {
if (LeapYear(year)) var days = daysofmonthLY[month];
else var days = daysofmonth[month];
return days - (DayOfWeek(days,month,year) - weekday + 7)%7;
}
|
For example the following script will show the dates of the last Sunday through to Saturday of December
1997:
for (var i=1; i<8; i++)
document.write(LastDay(i,12,1997)+' ');
|
When run it produces:
Variable Calendar Events/Holidays
Along with the events already described in the previous article Born on
the 4th of July, the following events occur on different days of the month depending on the year:
- Martin Luther King Day, third Monday in January.
- President's Day, third Monday in February.
- Daylight Savings time begins, first Sunday in April (but not in Arizona, Hawaii, and parts of southern Indiana).
- May Day Bank Holiday (United Kingdom), first Monday in May.
- Armed Forces Day, third Saturday in May.
- Mother's Day, second Sunday in May.
- Spring Bank Holiday (United Kingdom), last Monday in May.
- Memorial Day, last Monday in May.
- Father's Day, third Sunday in June.
- Late Summer Holiday (United Kingdom), last Monday in August.
- Labor Day, first Monday in September.
- Columbus Day, second Monday in October.
- Daylight Savings Time ends, last Sunday in October (but not in Arizona, Hawaii, and parts of southern Indiana).
- Thanksgiving Day, fourth Thursday in November.
So for example, to calculate the date that Martin Luther King Day falls on in 1998 we could use:
document.write("Martin Luther King Day - " + NthDay(3,2,1,1998));
|
Which when run produces:
However, with just a few variable definitions:
var sun=1,mon=2,tue=3,wed=4,thu=5,fri=6,sat=7;
var jan=1,feb=2,mar=3,apr=4,may=5,jun=6,jul=7,aug=8,sep=9,oct=10,nov=11,dec=12;
var first=1,second=2,third=3,fourth=4,fifth=5,last=-1;
|
and a slight tinkering of the NthDay() function we can make life really simple:
function NthDay(nth,weekday,month,year) {
if (nth > 0) return (nth-1)*7 + 1 + (7 + weekday - DayOfWeek((nth-1)*7 + 1,month,year))%7;
if (LeapYear(year)) var days = daysofmonthLY[month];
else var days = daysofmonth[month];
return days - (DayOfWeek(days,month,year) - weekday + 7)%7;
}
|
We can now call the NthDay() function to compute the first, second, third, fourth, fifth and last
weekday, making the LastDate() function obsolete. Along with the FullDate() function, described in the previous article
Monday's child is full of grace, we can calculate the dates as follows:
document.write("Daylight Savings time begins - " + FullDate(NthDay(first,sun,apr,1997),apr,1997) + '<BR>');
document.write("Mother's Day - " + FullDate(NthDay(second,sun,may,1997),may,1997) + '<BR>');
document.write("Armed Forces Day - " + FullDate(NthDay(third,sat,may,1997),may,1997) + '<BR>');
document.write("Thanksgiving Day - " + FullDate(NthDay(fourth,thu,nov,1997),nov,1997) + '<BR>');
document.write("5th Wednesday in December 1997 - " + FullDate(NthDay(fifth,wed,dec,1997),dec,1997) + '<BR>');
document.write("Daylight Savings Time ends - " + FullDate(NthDay(last,sun,oct,1997),oct,1997) + '<BR>');
|
Which when run produces:
Working Example
Try the frame version which shows all the variable calendar events and holidays for the current year:
Source Code
You can view the source code of the four components:
View the profile on Martin Webb and the list of other Articles by Martin Webb.
|
|