diff options
| author | Igor Minar | 2011-10-18 23:42:36 -0700 |
|---|---|---|
| committer | Igor Minar | 2011-10-20 16:51:28 -0700 |
| commit | e175db37c6f52bba4080efeec22a7120a896099e (patch) | |
| tree | 426cd3adb6b2fddaccc2651734076cb672539476 | |
| parent | f38010d3a2f457a53798212ef72418637dabe189 (diff) | |
| download | angular.js-e175db37c6f52bba4080efeec22a7120a896099e.tar.bz2 | |
fix(date filter): default to fullDate format
The browser's behave inconsistently, so we should just stick to one format
when the format is not specified by the developer
Closes #605
| -rw-r--r-- | src/filters.js | 42 | ||||
| -rw-r--r-- | test/FiltersSpec.js | 10 |
2 files changed, 27 insertions, 25 deletions
diff --git a/src/filters.js b/src/filters.js index b2d6f4b7..f9ff418e 100644 --- a/src/filters.js +++ b/src/filters.js @@ -318,7 +318,7 @@ var GET_TIME_ZONE = /[A-Z]{3}(?![+\-])/, * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or * number) or ISO 8601 extended datetime string (yyyy-MM-ddTHH:mm:ss.SSSZ). * @param {string=} format Formatting rules (see Description). If not specified, - * Date#toLocaleDateString is used. + * `fullDate` is used. * @returns {string} Formatted string or the input if input is not recognized as date/millis. * * @example @@ -344,7 +344,12 @@ var GET_TIME_ZONE = /[A-Z]{3}(?![+\-])/, </doc:example> */ angularFilter.date = function(date, format) { - var $locale = this.$service('$locale'); + var $locale = this.$service('$locale'), + text = '', + parts = [], + fn, match; + + format = format || 'fullDate' format = $locale.DATETIME_FORMATS[format] || format; if (isString(date)) { if (NUMBER_STRING.test(date)) { @@ -362,26 +367,23 @@ angularFilter.date = function(date, format) { return date; } - var text = date.toLocaleDateString(), fn; - if (format && isString(format)) { - text = ''; - var parts = [], match; - while(format) { - match = DATE_FORMATS_SPLIT.exec(format); - if (match) { - parts = concat(parts, match, 1); - format = parts.pop(); - } else { - parts.push(format); - format = null; - } + while(format) { + match = DATE_FORMATS_SPLIT.exec(format); + if (match) { + parts = concat(parts, match, 1); + format = parts.pop(); + } else { + parts.push(format); + format = null; } - forEach(parts, function(value){ - fn = DATE_FORMATS[value]; - text += fn ? fn(date, $locale.DATETIME_FORMATS) - : value.replace(/(^'|'$)/g, '').replace(/''/g, "'"); - }); } + + forEach(parts, function(value){ + fn = DATE_FORMATS[value]; + text += fn ? fn(date, $locale.DATETIME_FORMATS) + : value.replace(/(^'|'$)/g, '').replace(/''/g, "'"); + }); + return text; }; diff --git a/test/FiltersSpec.js b/test/FiltersSpec.js index 5bf9df6f..ac695ed4 100644 --- a/test/FiltersSpec.js +++ b/test/FiltersSpec.js @@ -225,13 +225,13 @@ describe('filter', function() { }); it('should do basic filter', function() { - expect(date(noon)).toEqual(noon.toLocaleDateString()); - expect(date(noon, '')).toEqual(noon.toLocaleDateString()); + expect(date(noon)).toEqual(date(noon, 'fullDate')); + expect(date(noon, '')).toEqual(date(noon, 'fullDate')); }); it('should accept number or number string representing milliseconds as input', function() { - expect(date(noon.getTime())).toEqual(noon.toLocaleDateString()); - expect(date(noon.getTime() + "")).toEqual(noon.toLocaleDateString()); + expect(date(noon.getTime())).toEqual(date(noon.getTime(), 'fullDate')); + expect(date(noon.getTime() + "")).toEqual(date(noon.getTime() + "", 'fullDate')); }); it('should accept various format strings', function() { @@ -297,7 +297,7 @@ describe('filter', function() { it('should be able to parse ISO 8601 dates/times using', function() { var isoString = '2010-09-03T05:05:08.872Z'; expect(date(isoString)). - toEqual(angular.String.toDate(isoString).toLocaleDateString()); + toEqual(date(isoString, 'fullDate')); }); it('should parse format ending with non-replaced string', function() { |
