diff --git a/src/lib/dates.js b/src/lib/dates.js index 67828b32837..1027a797928 100644 --- a/src/lib/dates.js +++ b/src/lib/dates.js @@ -345,7 +345,9 @@ function includeTime(dateStr, h, m, s, msec10) { // a Date object or milliseconds // optional dflt is the return value if cleaning fails exports.cleanDate = function(v, dflt, calendar) { - if(exports.isJSDate(v) || typeof v === 'number') { + // let us use cleanDate to provide a missing default without an error + if(v === BADNUM) return dflt; + if(exports.isJSDate(v) || (typeof v === 'number' && isFinite(v))) { // do not allow milliseconds (old) or jsdate objects (inherently // described as gregorian dates) with world calendars if(isWorldCalendar(calendar)) { diff --git a/test/jasmine/tests/lib_date_test.js b/test/jasmine/tests/lib_date_test.js index 2a0971afd7b..6bccb8a9865 100644 --- a/test/jasmine/tests/lib_date_test.js +++ b/test/jasmine/tests/lib_date_test.js @@ -391,20 +391,22 @@ describe('dates', function() { errors.push(msg); }); - [ + var cases = [ new Date(-20000, 0, 1), new Date(20000, 0, 1), new Date('fail'), undefined, null, NaN, [], {}, [0], {1: 2}, '', '2001-02-29' // not a leap year - ].forEach(function(v) { + ]; + cases.forEach(function(v) { expect(Lib.cleanDate(v)).toBeUndefined(); if(!isNumeric(+v)) expect(Lib.cleanDate(+v)).toBeUndefined(); expect(Lib.cleanDate(v, '2000-01-01')).toBe('2000-01-01'); }); - expect(errors.length).toBe(16); + // two errors for each case except `undefined` + expect(errors.length).toBe(2 * (cases.length - 1)); }); it('should not alter valid date strings, even to truncate them', function() {