15.9.1.4 Month number

2010-07-19

The month is the only part of a date that offsets at zero (except perhaps weekday). This is probably done to make it easy to use an array to make easy month name lookup tables. Therfore the range of a month is 0 through 11, inclusive. It is computed occording to an extensive table.

Note that t=0 is January.

Code: (Meta Ecma)
MonthFromTime = function(t){
var d = DayWithinYear(t);
if (d < 0) return NaN;
if (d < 31) return 0;
if (d < 59 + InLeapYear(t)) return 1;
if (d < 90 + InLeapYear(t)) return 2;
if (d < 120 + InLeapYear(t)) return 3;
if (d < 151 + InLeapYear(t)) return 4;
if (d < 181 + InLeapYear(t)) return 5;
if (d < 212 + InLeapYear(t)) return 6;
if (d < 243 + InLeapYear(t)) return 7;
if (d < 273 + InLeapYear(t)) return 8;
if (d < 304 + InLeapYear(t)) return 9;
if (d < 334 + InLeapYear(t)) return 10;
if (d < 365 + InLeapYear(t)) return 11;
return NaN;
}