diff --git a/src/ng/filter/filters.js b/src/ng/filter/filters.js index 3830e965ffec..e03d59d7cc29 100644 --- a/src/ng/filter/filters.js +++ b/src/ng/filter/filters.js @@ -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; diff --git a/test/ng/filter/filtersSpec.js b/test/ng/filter/filtersSpec.js index 2ed99cf173b5..eb98c355d7ec 100644 --- a/test/ng/filter/filtersSpec.js +++ b/test/ng/filter/filtersSpec.js @@ -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'; - - 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 format = 'yyyy-MM-dd ss'; + + 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'); }); }); });