From b5a510a343270f499cbb8b8a9ac3a3309e9b7ce2 Mon Sep 17 00:00:00 2001 From: Di Peng Date: Wed, 22 Jun 2011 12:33:31 -0700 Subject: feat:filter.date: add day/month string format support Support new date format, specifically day of week/Month of year in string e.g. {{ someDate | data:"EEE, MMM d, yyyy" }} -> "Wed, Jul 10, 2011" Closes #396 --- src/angular-mocks.js | 5 ++++- src/filters.js | 58 +++++++++++++++++++++++++++++++++++++--------------- 2 files changed, 46 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/angular-mocks.js b/src/angular-mocks.js index 0f806917..887d3520 100644 --- a/src/angular-mocks.js +++ b/src/angular-mocks.js @@ -385,9 +385,12 @@ function TzDate(offset, timestamp) { return this.origDate.getUTCSeconds(); }; + this.getDay = function() { + return this.origDate.getDay(); + }; //hide all methods not implemented in this mock that the Date prototype exposes - var unimplementedMethods = ['getDay', 'getMilliseconds', 'getTime', 'getUTCDay', + var unimplementedMethods = ['getMilliseconds', 'getTime', 'getUTCDay', 'getUTCMilliseconds', 'getYear', 'setDate', 'setFullYear', 'setHours', 'setMilliseconds', 'setMinutes', 'setMonth', 'setSeconds', 'setTime', 'setUTCDate', 'setUTCFullYear', 'setUTCHours', 'setUTCMilliseconds', 'setUTCMinutes', 'setUTCMonth', 'setUTCSeconds', diff --git a/src/filters.js b/src/filters.js index 49091e81..491bb88e 100644 --- a/src/filters.js +++ b/src/filters.js @@ -168,31 +168,53 @@ function dateGetter(name, size, offset, trim) { }; } +function dateStrGetter(name, shortForm) { + return function(date) { + var value = date['get' + name](); + + if(name == 'Month') { + value = MONTH[value]; + } else { + value = DAY[value]; + } + + return shortForm ? value.substr(0,3) : value; + }; +} + +var DAY = 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','); + +var MONTH = 'January,February,March,April,May,June,July,August,September,October,November,December'. + split(','); var DATE_FORMATS = { yyyy: dateGetter('FullYear', 4), - yy: dateGetter('FullYear', 2, 0, true), - MM: dateGetter('Month', 2, 1), - M: dateGetter('Month', 1, 1), - dd: dateGetter('Date', 2), - d: dateGetter('Date', 1), - HH: dateGetter('Hours', 2), - H: dateGetter('Hours', 1), - hh: dateGetter('Hours', 2, -12), - h: dateGetter('Hours', 1, -12), - mm: dateGetter('Minutes', 2), - m: dateGetter('Minutes', 1), - ss: dateGetter('Seconds', 2), - s: dateGetter('Seconds', 1), - a: function(date){return date.getHours() < 12 ? 'am' : 'pm';}, - Z: function(date){ + yy: dateGetter('FullYear', 2, 0, true), + MMMMM: dateStrGetter('Month'), + MMM: dateStrGetter('Month', true), + MM: dateGetter('Month', 2, 1), + M: dateGetter('Month', 1, 1), + dd: dateGetter('Date', 2), + d: dateGetter('Date', 1), + HH: dateGetter('Hours', 2), + H: dateGetter('Hours', 1), + hh: dateGetter('Hours', 2, -12), + h: dateGetter('Hours', 1, -12), + mm: dateGetter('Minutes', 2), + m: dateGetter('Minutes', 1), + ss: dateGetter('Seconds', 2), + s: dateGetter('Seconds', 1), + EEEE: dateStrGetter('Day'), + EEE: dateStrGetter('Day', true), + a: function(date){return date.getHours() < 12 ? 'am' : 'pm';}, + Z: function(date){ var offset = date.getTimezoneOffset(); return padNumber(offset / 60, 2) + padNumber(Math.abs(offset % 60), 2); } }; -var DATE_FORMATS_SPLIT = /([^yMdHhmsaZ]*)(y+|M+|d+|H+|h+|m+|s+|a|Z)(.*)/; +var DATE_FORMATS_SPLIT = /([^yMdHhmsaZE]*)(E+|y+|M+|d+|H+|h+|m+|s+|a|Z)(.*)/; var NUMBER_STRING = /^\d+$/; @@ -209,10 +231,14 @@ var NUMBER_STRING = /^\d+$/; * * * `'yyyy'`: 4 digit representation of year e.g. 2010 * * `'yy'`: 2 digit representation of year, padded (00-99) + * * `'MMMMM'`: Month in year (January‒December) + * * `'MMM'`: Month in year (Jan - Dec) * * `'MM'`: Month in year, padded (01‒12) * * `'M'`: Month in year (1‒12) * * `'dd'`: Day in month, padded (01‒31) * * `'d'`: Day in month (1-31) + * * `'EEEE'`: Day in Week,(Sunday‒Saturday) + * * `'EEE'`: Day in Week, (Sun-Sat) * * `'HH'`: Hour in day, padded (00‒23) * * `'H'`: Hour in day (0-23) * * `'hh'`: Hour in am/pm, padded (01‒12) -- cgit v1.2.3