diff --git a/src/ng/filter/filters.js b/src/ng/filter/filters.js index 17fcfe362e4d..b61e1b28bbc7 100644 --- a/src/ng/filter/filters.js +++ b/src/ng/filter/filters.js @@ -243,8 +243,8 @@ function dateStrGetter(name, shortForm) { }; } -function timeZoneGetter(date) { - var zone = -1 * date.getTimezoneOffset(); +function timeZoneGetter(date, formats, offset) { + var zone = -1 * offset; var paddedZone = (zone >= 0) ? "+" : ""; paddedZone += padNumber(Math[zone > 0 ? 'floor' : 'ceil'](zone / 60), 2) + @@ -465,13 +465,18 @@ function dateFilter($locale) { } } - if (timezone && timezone === 'UTC') { - date = new Date(date.getTime()); - date.setMinutes(date.getMinutes() + date.getTimezoneOffset()); + var dateTimezoneOffset = date.getTimezoneOffset(); + if (timezone) { + var requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000; + if (!isNaN(requestedTimezoneOffset)) { + date = new Date(date.getTime()); + date.setMinutes(date.getMinutes() + dateTimezoneOffset - requestedTimezoneOffset); + dateTimezoneOffset = requestedTimezoneOffset; + } } forEach(parts, function(value){ fn = DATE_FORMATS[value]; - text += fn ? fn(date, $locale.DATETIME_FORMATS) + text += fn ? fn(date, $locale.DATETIME_FORMATS, dateTimezoneOffset) : value.replace(/(^'|'$)/g, '').replace(/''/g, "'"); }); diff --git a/test/ng/filter/filtersSpec.js b/test/ng/filter/filtersSpec.js index d90143744d44..731aeb38a0f0 100644 --- a/test/ng/filter/filtersSpec.js +++ b/test/ng/filter/filtersSpec.js @@ -406,7 +406,10 @@ describe('filters', function() { it('should use UTC if the timezone is set to "UTC"', function() { expect(date(new Date(2003, 8, 10, 3, 2, 4), 'yyyy-MM-dd HH-mm-ss')).toEqual('2003-09-10 03-02-04'); + expect(date(new Date(2003, 8, 10, 3, 2, 4), 'yyyy-MM-dd HH-mm-ss', 'WTF')).toEqual('2003-09-10 03-02-04'); expect(date(new Date(Date.UTC(2003, 8, 10, 3, 2, 4)), 'yyyy-MM-dd HH-mm-ss', 'UTC')).toEqual('2003-09-10 03-02-04'); + expect(date(new Date(Date.UTC(2003, 8, 10, 3, 2, 4)), 'yyyy-MM-dd HH-mm-ssZ', 'UTC')).toEqual('2003-09-10 03-02-04+0000'); + expect(date(new Date(Date.UTC(2003, 8, 10, 3, 2, 4)), 'yyyy-MM-dd HH-mm-ssZ', 'GMT+0500')).toEqual('2003-09-10 08-02-04+0500'); }); }); });