To calculate any time values relative to the start of a year, we need to know what instant the year began.
All non-leap years have 365 days with the usual number of days in each month. Leap years have an extra day in February. The calculation shown below uses known leap years and non-leap years to adjust the day numbers and yield the day number of the first day of the given year and then use that to work out the time in milliseconds when the year started:
DayFromYear(y) = 365 * (y - 1970) + floor((y - 1969) / 4) - floor((y - 1901) / 100) + floor((y - 1601) / 400) msPerDay = 86400000 TimeFromYear(y) = msPerDay * DayFromYear(y)
Subtracting this value from any absolute time value gives you a millisecond accurate offset from the beginning of the specified year.
// Work out days and milliseconds at start of a year var msPerDay = 86400000; // Test day from year document.write("<TABLE BORDER=1>"); for(var ii=1980; ii<2009; ii++) { document.write("<TR>"); document.write("<TD>"); document.write(ii); document.write("</TD>"); document.write("<TD>"); document.write(dayFromYear(ii)); document.write("</TD>"); document.write("<TD>"); document.write(timeFromYear(ii)); document.write("</TD>"); document.write("</TR>"); } document.write("</TABLE>"); // Work out milliseconds at start of year function timeFromYear(aYear) { var myTime = msPerDay * dayFromYear(aYear); return myTime; } // Day from year function function dayFromYear(aYear) { var myDay = 365 * (aYear - 1970) + Math.floor((aYear - 1969) / 4) - Math.floor((aYear - 1901) / 100) + Math.floor((aYear - 1601) / 400); return myDay; }
Prev | Home | Next |
throws | Up | Time range |
JavaScript Programmer's Reference, Cliff Wootton Wrox Press (www.wrox.com) Join the Wrox JavaScript forum at p2p.wrox.com Please report problems to support@wrox.com © 2001 Wrox Press. All Rights Reserved. Terms and conditions. |