fix(date): correctly format dates with more than 3 sub-second digits

This date {{2003-09-10T13:02:03.123456Z | date: yyyy-mm-dd ss} is now
treated as having 123.45ms. Previously it had 123456ms so 123 seconds
were added to the formatted date.
Use local date in unit tests so they work in any time zone
This commit is contained in:
Kevin Wells 2013-05-07 22:58:05 +01:00 committed by Pete Bacon Darwin
parent 4622af3f07
commit 4f2e360685
2 changed files with 24 additions and 16 deletions

View file

@ -356,7 +356,11 @@ function dateFilter($locale) {
tzMin = int(match[9] + match[11]);
}
dateSetter.call(date, int(match[1]), int(match[2]) - 1, int(match[3]));
timeSetter.call(date, int(match[4]||0) - tzHour, int(match[5]||0) - tzMin, int(match[6]||0), int(match[7]||0));
var h = int(match[4]||0) - tzHour;
var m = int(match[5]||0) - tzMin
var s = int(match[6]||0);
var ms = Math.round(parseFloat('0.' + (match[7]||0)) * 1000);
timeSetter.call(date, h, m, s, ms);
return date;
}
return string;

View file

@ -300,21 +300,23 @@ describe('filters', function() {
it('should support various iso8061 date strings with timezone as input', function() {
var format = 'yyyy-MM-dd ss';
var localDay = new Date(Date.UTC(2003, 9, 10, 13, 2, 3, 0)).getDate();
//full ISO8061
expect(date('2003-09-10T13:02:03.000Z', format)).toEqual('2003-09-10 03');
expect(date('2003-09-10T13:02:03.000Z', format)).toEqual('2003-09-' + localDay + ' 03');
expect(date('2003-09-10T13:02:03.000+00:00', format)).toEqual('2003-09-10 03');
expect(date('2003-09-10T13:02:03.000+00:00', format)).toEqual('2003-09-' + localDay + ' 03');
expect(date('20030910T033203-0930', format)).toEqual('2003-09-10 03');
expect(date('20030910T033203-0930', format)).toEqual('2003-09-' + localDay + ' 03');
//no millis
expect(date('2003-09-10T13:02:03Z', format)).toEqual('2003-09-10 03');
expect(date('2003-09-10T13:02:03Z', format)).toEqual('2003-09-' + localDay + ' 03');
//no seconds
expect(date('2003-09-10T13:02Z', format)).toEqual('2003-09-10 00');
expect(date('2003-09-10T13:02Z', format)).toEqual('2003-09-' + localDay + ' 00');
//no minutes
expect(date('2003-09-10T13Z', format)).toEqual('2003-09-10 00');
expect(date('2003-09-10T13Z', format)).toEqual('2003-09-' + localDay + ' 00');
});
@ -331,16 +333,18 @@ describe('filters', function() {
});
it('should support different degrees of subsecond precision', function () {
var format = 'yyyy-MM-dd';
var format = 'yyyy-MM-dd ss';
expect(date('2003-09-10T13:02:03.12345678Z', format)).toEqual('2003-09-10');
expect(date('2003-09-10T13:02:03.1234567Z', format)).toEqual('2003-09-10');
expect(date('2003-09-10T13:02:03.123456Z', format)).toEqual('2003-09-10');
expect(date('2003-09-10T13:02:03.12345Z', format)).toEqual('2003-09-10');
expect(date('2003-09-10T13:02:03.1234Z', format)).toEqual('2003-09-10');
expect(date('2003-09-10T13:02:03.123Z', format)).toEqual('2003-09-10');
expect(date('2003-09-10T13:02:03.12Z', format)).toEqual('2003-09-10');
expect(date('2003-09-10T13:02:03.1Z', format)).toEqual('2003-09-10');
var localDay = new Date(Date.UTC(2003, 9-1, 10, 13, 2, 3, 123)).getDate();
expect(date('2003-09-10T13:02:03.12345678Z', format)).toEqual('2003-09-' + localDay + ' 03');
expect(date('2003-09-10T13:02:03.1234567Z', format)).toEqual('2003-09-' + localDay + ' 03');
expect(date('2003-09-10T13:02:03.123456Z', format)).toEqual('2003-09-' + localDay + ' 03');
expect(date('2003-09-10T13:02:03.12345Z', format)).toEqual('2003-09-' + localDay + ' 03');
expect(date('2003-09-10T13:02:03.1234Z', format)).toEqual('2003-09-' + localDay + ' 03');
expect(date('2003-09-10T13:02:03.123Z', format)).toEqual('2003-09-' + localDay + ' 03');
expect(date('2003-09-10T13:02:03.12Z', format)).toEqual('2003-09-' + localDay + ' 03');
expect(date('2003-09-10T13:02:03.1Z', format)).toEqual('2003-09-' + localDay + ' 03');
});
});
});