You are here: irt.org | Articles | JavaScript | Date and Time | Extending "Born of the 4th of July" [ previous next ]
Published on: Friday 26th December 1997 By: Martin Webb
<HTML><HEAD>
<SCRIPT LANGUAGE="JavaScript"><!--
function y2k(number) { return (number < 1000) ? number + 1900 : number; }
var today = new Date();
var year = y2k(today.getYear());
//--></SCRIPT>
<FRAMESET ROWS="50%,50%">
<FRAME SCROLLING=NO FRAMEBORDER=0 BORDER=0 NORESIZE SRC="input.htm">
<FRAME SCROLLING=YES FRAMEBORDER=0 BORDER=0 NORESIZE SRC="blank.htm" NAME="outputFrame">
</FRAMESET>
</HEAD></HTML><BODY></BODY>
<HTML><HEAD>
<LINK REL=STYLESHEET HREF="../../utility/main.css" TYPE="text/css">
<SCRIPT LANGUAGE="JavaScript"><!--
function ChosenDate(object) {
year = object.year.value;
if (parent.location.href != window.location.href) {
parent.year = year;
parent.outputFrame.location.href = 'output.htm';
}
else {
return true;
}
return false;
}
function y2k(number) { return (number < 1000) ? number + 1900 : number; }
var today = new Date();
var thisYear = y2k(today.getYear());
var yearOutput = '<INPUT TYPE="TEXT" NAME="year" SIZE="4" VALUE="' + thisYear + '">';
//--></SCRIPT>
</HEAD>
<BODY><FONT FACE="ARIAL,HELVETICA"><CENTER>
<H2>Select year:</H2>
<FORM NAME="inputDateForm" ACTION="output.htm" onSubmit="return ChosenDate(document.inputDateForm);">
Year:
<SCRIPT LANGUAGE="JavaScript"><!--
document.write(yearOutput);
//--></SCRIPT>
<INPUT TYPE="SUBMIT" VALUE="Show">
</FORM>
<A HREF="index.htm" TARGET="_parent">Return</A>
</CENTER></FONT></BODY>
</HTML><HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript"><!--
if (location.search.length == 0)
var year = parent.year - 0;
else
var year = location.search.substring(6) - 0;
function DayOfWeek(day,month,year) {
var a = Math.floor((14 - month)/12);
var y = year - a;
var m = month + 12*a - 2;
var d = (day + y + Math.floor(y/4) - Math.floor(y/100) +
Math.floor(y/400) + Math.floor((31*m)/12)) % 7;
return d + 1;
}
function Nths(day) {
if (day == 1 || day == 21 || day == 31) return 'st';
if (day == 2 || day == 22) return 'nd';
if (day == 3 || day == 23) return 'rd';
return 'th';
}
function FullDate(day,month,year) {
return daysofweek[DayOfWeek(day,month,year)] +' '+ day + Nths(day) +' '+ monthsofyear[month] +' '+ year;
}
function y2k(number) { return (number < 1000) ? number + 1900 : number; }
function padout(number) { return (number < 10) ? '0' + number : number; }
function makeArray() {
this[0] = makeArray.arguments.length;
for (i = 0; i<makeArray.arguments.length; i++)
this[i+1] = makeArray.arguments[i];
}
var daysofmonth = new makeArray( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var daysofmonthLY = new makeArray( 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var daysofweek = new makeArray('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
var monthsofyear = new makeArray('January','February','March','April','May','June','July','August','September','October','November','December');
var accumulate = new makeArray( 0, 31, 59, 90,120,151,181,212,243,273,304,334);
var accumulateLY = new makeArray( 0, 31, 60, 91,121,152,182,213,244,274,305,335);
function LeapYear(year) {
if ((year/4) != Math.floor(year/4)) return false;
if ((year/100) != Math.floor(year/100)) return true;
if ((year/400) != Math.floor(year/400)) return false;
return true;
}
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;
}
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;
function Easter(Y) {
var C = Math.floor(Y/100);
var N = Y - 19*Math.floor(Y/19);
var K = Math.floor((C - 17)/25);
var I = C - Math.floor(C/4) - Math.floor((C - K)/3) + 19*N + 15;
I = I - 30*Math.floor((I/30));
I = I - Math.floor(I/28)*(1 - Math.floor(I/28)*Math.floor(29/(I + 1))*Math.floor((21 - N)/11));
var J = Y + Math.floor(Y/4) + I + 2 - C + Math.floor(C/4);
J = J - 7*Math.floor(J/7);
var L = I - J;
var M = 3 + Math.floor((L + 40)/44);
var D = L + 28 - 31*Math.floor(M/4);
return padout(M) + '.' + padout(D);
}
function getMM(string) { return eval(string.substring(0,2)); }
function getDD(string) { return eval(string.substring(3,5)); }
function getYYYY(string) { return eval(string.substring(0,string.indexOf('.'))); }
function getMMDD(string) { return string.substring(string.indexOf('.')+1,string.length); }
function daysinyear(year) { if (LeapYear(year)) return 366; else return 365; }
function addDays(day,month,year,addition) {
if (LeapYear(year)) var number = day + accumulateLY[month] + addition;
else var number = day + accumulate[month] + addition;
var days = daysinyear(year);
while (number > days) {
number -= days;
days = daysinyear(++year);
}
while (number < 1) {
days = daysinyear(--year);
number += days;
}
month = 1;
if (LeapYear(year)) {
while (number > accumulateLY[month]) { month++; }
day = number - accumulateLY[--month];
}
else {
while (number > accumulate[month]) { month++; }
day = number - accumulate[--month];
}
return year + '.' + padout(month) + '.' + padout(day);
}
function Event(day,month,what) {
this.value = '' + padout(month) + '/' + padout(day);
this.day = day;
this.month = month;
this.what = what;
}
function setEvent(day,month,what) { myEvent[eventIndex++] = new Event(day,month,what); }
var eventIndex = 0;
var myEvent = new Array();
setEvent( 1,jan,"New Year's Day");
setEvent( 6,jan,"Epiphany");
setEvent( 2,feb,"Groundhog Day");
setEvent(14,feb,"Valentine's Day");
setEvent(29,feb,"Leap Year's Day");
setEvent(17,mar,"St. Patrick's Day");
setEvent(15,apr,"Tax Day");
setEvent( 4,jul,"Independence Day");
setEvent(12,jul,"Battle of the Boyne (N. Ireland)");
setEvent(15,aug,"Assumption");
setEvent(12,oct,"Columbus Day");
setEvent(31,oct,"Halloween");
setEvent( 1,nov,"All Saint's Day");
setEvent(11,nov,"Veteran's Day");
setEvent( 8,dec,"Immaculate Conception");
setEvent(24,dec,"Christmas Eve");
setEvent(25,dec,"Christmas Day");
setEvent(26,dec,"Boxing Day - St Stephen's Day");
setEvent(31,dec,"New Year's Eve");
var easter = Easter(year);
var easterDay = getDD(easter);
var easterMonth = getMM(easter);
setEvent(easterDay,easterMonth,year,"Easter Sunday");
var when = addDays(easterDay,easterMonth,year,-63);
setEvent(getDD(getMMDD(when)),getMM(getMMDD(when)),"Septuagesima Sunday");
var when = addDays(easterDay,easterMonth,year,-56);
setEvent(getDD(getMMDD(when)),getMM(getMMDD(when)),"Sexagesima Sunday");
var when = addDays(easterDay,easterMonth,year,-49);
setEvent(getDD(getMMDD(when)),getMM(getMMDD(when)),"Shrove Sunday");
var when = addDays(easterDay,easterMonth,year,-47);
setEvent(getDD(getMMDD(when)),getMM(getMMDD(when)),"Shrove Tuesday");
var when = addDays(easterDay,easterMonth,year,-46);
setEvent(getDD(getMMDD(when)),getMM(getMMDD(when)),"Ash Wednesday");
var when = addDays(easterDay,easterMonth,year,-14);
setEvent(getDD(getMMDD(when)),getMM(getMMDD(when)),"Passion Sunday");
var when = addDays(easterDay,easterMonth,year,-7);
setEvent(getDD(getMMDD(when)),getMM(getMMDD(when)),"Palm Sunday");
var when = addDays(easterDay,easterMonth,year,-3);
setEvent(getDD(getMMDD(when)),getMM(getMMDD(when)),"Holy or Maundy Thursday");
var when = addDays(easterDay,easterMonth,year,-2);
setEvent(getDD(getMMDD(when)),getMM(getMMDD(when)),"Good Friday");
var when = addDays(easterDay,easterMonth,year,35);
setEvent(getDD(getMMDD(when)),getMM(getMMDD(when)),"Rogation Sunday");
var when = addDays(easterDay,easterMonth,year,39);
setEvent(getDD(getMMDD(when)),getMM(getMMDD(when)),"Ascension Day");
var when = addDays(easterDay,easterMonth,year,49);
setEvent(getDD(getMMDD(when)),getMM(getMMDD(when)),"Pentecost or Whitsunday");
var when = addDays(easterDay,easterMonth,year,50);
setEvent(getDD(getMMDD(when)),getMM(getMMDD(when)),"Whitmundy");
var when = addDays(easterDay,easterMonth,year,56);
setEvent(getDD(getMMDD(when)),getMM(getMMDD(when)),"Trinity Sunday");
var when = addDays(easterDay,easterMonth,year,60);
setEvent(getDD(getMMDD(when)),getMM(getMMDD(when)),"Corpus Christi");
var when = addDays(easterDay,easterMonth,year,63);
setEvent(getDD(getMMDD(when)),getMM(getMMDD(when)),"Corpus Christi (Catholic Church in the United States)");
setEvent(NthDay(third,mon,jan,year),jan,"Martin Luther King Day");
setEvent(NthDay(third,mon,feb,year),feb,"President's Day");
setEvent(NthDay(first,sun,apr,year),apr,"Daylight Savings time begins");
setEvent(NthDay(first,mon,may,year),may,"May Day Bank Holiday (United Kingdom)");
setEvent(NthDay(third,sat,may,year),may,"Armed Forces Day");
setEvent(NthDay(second,sun,may,year),may,"Mother's Day");
setEvent(NthDay(last,mon,may,year),may,"Spring Bank Holiday (United Kingdom)");
setEvent(NthDay(last,mon,may,year),may,"Memorial Day");
setEvent(NthDay(third,sun,jun,year),jun,"Father's Day");
setEvent(NthDay(last,mon,aug,year),aug,"Late Summer Holiday (United Kingdom)");
setEvent(NthDay(first,mon,sep,year),sep,"Labor Day");
setEvent(NthDay(second,mon,oct,year),oct,"Columbus Day");
setEvent(NthDay(last,sun,oct,year),oct,"Daylight Savings Time ends");
setEvent(NthDay(fourth,thu,nov,year),nov,"Thanksgiving Day");
function myObjectBubbleSort(arrayName,length) {
for (var i=0; i<(length-1); i++)
for (var j=i+1; j<length; j++)
if (arrayName[j].value < arrayName[i].value) {
var dummy = arrayName[i];
arrayName[i] = arrayName[j];
arrayName[j] = dummy;
}
}
function showAllEvents(year) {
var output = '';
for(var i=0; i < eventIndex; i++) {
output += FullDate(myEvent[i].day,myEvent[i].month,year) + ' ' + myEvent[i].what+'<BR>';
}
return output;
}
//--></SCRIPT>
</HEAD>
<BODY><CENTER>
<SCRIPT LANGUAGE="JavaScript"><!--
document.write('<TABLE><TR><TD>');
document.write('<H2>Unsorted:<\/H2>' + showAllEvents(year));
document.write('<\/TD><TD>');
myObjectBubbleSort(myEvent,eventIndex);
document.write('<H2>Sorted:<\/H2>' + showAllEvents(year));
document.write('<\/TD><\/TR><\/TABLE>');
//--></SCRIPT>
<P><A HREF="index.htm" TARGET="_parent">Return</A>
</CENTER></BODY>
</HTML>And now...The Weekly Update Script