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