What result is right for the following test cases?
//Chrome 19 Opera 12 Firefox 11 IE 9 Safari 5.1.1
console.log(Date.parse("2012-11-31T23:59:59.000Z"));//1354406399000 NaN NaN 1354406399000 NaN
console.log(Date.parse("2012-12-31T23:59:59.000Z"));//1356998399000 1356998399000 1356998399000 1356998399000 1356998399000
console.log(Date.parse("2012-12-31T23:59:60.000Z"));//NaN NaN NaN NaN 1356998400000
console.log(Date.parse("2012-04-04T05:02:02.170Z"));//1333515722170 1333515722170 1333515722170 1333515722170 1333515722170
console.log(Date.parse("2012-04-04T24:00:00.000Z"));//NaN 1333584000000 1333584000000 1333584000000 1333584000000
console.log(Date.parse("2012-04-04T24:00:00.500Z"));//NaN NaN 1333584000500 1333584000500 NaN
console.log(Date.parse("2012-12-31T10:08:60.000Z"));//NaN NaN NaN NaN 1356948540000
console.log(Date.parse("2012-13-01T12:00:00.000Z"));//NaN NaN NaN NaN NaN
console.log(Date.parse("2012-12-32T12:00:00.000Z"));//NaN NaN NaN NaN NaN
console.log(Date.parse("2012-12-31T25:00:00.000Z"));//NaN NaN NaN NaN NaN
console.log(Date.parse("2012-12-31T24:01:00.000Z"));//NaN NaN NaN 1356998460000 NaN
console.log(Date.parse("2012-12-31T12:60:00.000Z"));//NaN NaN NaN NaN NaN
console.log(Date.parse("2012-12-31T12:00:60.000Z"));//NaN NaN NaN NaN 1356955260000
console.log(Date.parse("2012-00-31T23:59:59.000Z"));//NaN NaN NaN NaN NaN
console.log(Date.parse("2012-12-00T23:59:59.000Z"));//NaN NaN NaN NaN NaN
console.log(Date.parse("2012-02-29T12:00:00.000Z"));//1330516800000 1330516800000 1330516800000 1330516800000 1330516800000
console.log(Date.parse("2011-02-29T12:00:00.000Z"));//1298980800000 NaN NaN 1298980800000 NaN
console.log(Date.parse("2011-03-01T12:00:00.000Z"));//1298980800000 1298980800000 1298980800000 1298980800000 1298980800000
// extended years:
console.log(Date.parse("0000-01-01T00:00:00.000Z"));//-621672192e5 -621672192e5 -621672192e5 -621672192e5 -621672192e5
console.log(Date.parse("+275760-09-13T00:00:00.000Z"));//8.64e15 NaN 8.64e15 8.64e15 8.64e15
console.log(Date.parse("-271821-04-20T00:00:00.000Z"));//-8.64e15 NaN -8.64e15 -8.64e15 -8.6400000864e15
console.log(Date.parse("+275760-09-13T00:00:00.001Z"));//NaN NaN NaN 8.64e15 + 1 8.64e15 + 1
console.log(Date.parse("-271821-04-19T23:59:59.999Z"));//NaN NaN NaN -8.64e15 - 1 -8.6400000864e15 - 1
// https://github.com/kriskowal/es5-shim/issues/80 Safari bug with leap day
console.log(Date.parse("2034-03-01T00:00:00.000Z") -
Date.parse("2034-02-27T23:59:59.999Z"));//86400001 86400001 86400001 86400001 1
// Time Zone Offset
console.log(Date.parse("2012-01-29T12:00:00.000+01:00"));//132783480e4 132783480e4 132783480e4 132783480e4 132783480e4
console.log(Date.parse("2012-01-29T12:00:00.000-00:00"));//132783840e4 132783840e4 132783840e4 132783840e4 132783840e4
console.log(Date.parse("2012-01-29T12:00:00.000+00:00"));//132783840e4 132783840e4 132783840e4 132783840e4 132783840e4
console.log(Date.parse("2012-01-29T12:00:00.000+23:59"));//132775206e4 132775206e4 132775206e4 132775206e4 132775206e4
console.log(Date.parse("2012-01-29T12:00:00.000-23:59"));//132792474e4 132792474e4 132792474e4 132792474e4 132792474e4
console.log(Date.parse("2012-01-29T12:00:00.000+24:00"));//NaN 1327752e6 NaN 1327752000000 1327752000000
console.log(Date.parse("2012-01-29T12:00:00.000+24:01"));//NaN NaN NaN 1327751940000 1327751940000
console.log(Date.parse("2012-01-29T12:00:00.000+24:59"));//NaN NaN NaN 1327748460000 1327748460000
console.log(Date.parse("2012-01-29T12:00:00.000+25:00"));//NaN NaN NaN NaN NaN
console.log(Date.parse("2012-01-29T12:00:00.000+00:60"));//NaN NaN NaN NaN NaN
console.log(Date.parse("-271821-04-20T00:00:00.000+00:01"));//NaN NaN NaN -864000000006e4 -864000008646e4
console.log(Date.parse("-271821-04-20T00:01:00.000+00:01"));//-8.64e15 NaN -8.64e15 -8.64e15 -864000008640e4
Seems that ECMAScript should be more specific for edge cases; currently is says that invalid date formats are implementation dependent, am I right?