Skip to content

Commit b5a510a

Browse files
author
Di Peng
committed
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 angular#396
1 parent 9ec45ad commit b5a510a

File tree

3 files changed

+52
-17
lines changed

3 files changed

+52
-17
lines changed

src/angular-mocks.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -385,9 +385,12 @@ function TzDate(offset, timestamp) {
385385
return this.origDate.getUTCSeconds();
386386
};
387387

388+
this.getDay = function() {
389+
return this.origDate.getDay();
390+
};
388391

389392
//hide all methods not implemented in this mock that the Date prototype exposes
390-
var unimplementedMethods = ['getDay', 'getMilliseconds', 'getTime', 'getUTCDay',
393+
var unimplementedMethods = ['getMilliseconds', 'getTime', 'getUTCDay',
391394
'getUTCMilliseconds', 'getYear', 'setDate', 'setFullYear', 'setHours', 'setMilliseconds',
392395
'setMinutes', 'setMonth', 'setSeconds', 'setTime', 'setUTCDate', 'setUTCFullYear',
393396
'setUTCHours', 'setUTCMilliseconds', 'setUTCMinutes', 'setUTCMonth', 'setUTCSeconds',

src/filters.js

Lines changed: 42 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -168,31 +168,53 @@ function dateGetter(name, size, offset, trim) {
168168
};
169169
}
170170

171+
function dateStrGetter(name, shortForm) {
172+
return function(date) {
173+
var value = date['get' + name]();
174+
175+
if(name == 'Month') {
176+
value = MONTH[value];
177+
} else {
178+
value = DAY[value];
179+
}
180+
181+
return shortForm ? value.substr(0,3) : value;
182+
};
183+
}
184+
185+
var DAY = 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(',');
186+
187+
var MONTH = 'January,February,March,April,May,June,July,August,September,October,November,December'.
188+
split(',');
171189

172190
var DATE_FORMATS = {
173191
yyyy: dateGetter('FullYear', 4),
174-
yy: dateGetter('FullYear', 2, 0, true),
175-
MM: dateGetter('Month', 2, 1),
176-
M: dateGetter('Month', 1, 1),
177-
dd: dateGetter('Date', 2),
178-
d: dateGetter('Date', 1),
179-
HH: dateGetter('Hours', 2),
180-
H: dateGetter('Hours', 1),
181-
hh: dateGetter('Hours', 2, -12),
182-
h: dateGetter('Hours', 1, -12),
183-
mm: dateGetter('Minutes', 2),
184-
m: dateGetter('Minutes', 1),
185-
ss: dateGetter('Seconds', 2),
186-
s: dateGetter('Seconds', 1),
187-
a: function(date){return date.getHours() < 12 ? 'am' : 'pm';},
188-
Z: function(date){
192+
yy: dateGetter('FullYear', 2, 0, true),
193+
MMMMM: dateStrGetter('Month'),
194+
MMM: dateStrGetter('Month', true),
195+
MM: dateGetter('Month', 2, 1),
196+
M: dateGetter('Month', 1, 1),
197+
dd: dateGetter('Date', 2),
198+
d: dateGetter('Date', 1),
199+
HH: dateGetter('Hours', 2),
200+
H: dateGetter('Hours', 1),
201+
hh: dateGetter('Hours', 2, -12),
202+
h: dateGetter('Hours', 1, -12),
203+
mm: dateGetter('Minutes', 2),
204+
m: dateGetter('Minutes', 1),
205+
ss: dateGetter('Seconds', 2),
206+
s: dateGetter('Seconds', 1),
207+
EEEE: dateStrGetter('Day'),
208+
EEE: dateStrGetter('Day', true),
209+
a: function(date){return date.getHours() < 12 ? 'am' : 'pm';},
210+
Z: function(date){
189211
var offset = date.getTimezoneOffset();
190212
return padNumber(offset / 60, 2) + padNumber(Math.abs(offset % 60), 2);
191213
}
192214
};
193215

194216

195-
var DATE_FORMATS_SPLIT = /([^yMdHhmsaZ]*)(y+|M+|d+|H+|h+|m+|s+|a|Z)(.*)/;
217+
var DATE_FORMATS_SPLIT = /([^yMdHhmsaZE]*)(E+|y+|M+|d+|H+|h+|m+|s+|a|Z)(.*)/;
196218
var NUMBER_STRING = /^\d+$/;
197219

198220

@@ -209,10 +231,14 @@ var NUMBER_STRING = /^\d+$/;
209231
*
210232
* * `'yyyy'`: 4 digit representation of year e.g. 2010
211233
* * `'yy'`: 2 digit representation of year, padded (00-99)
234+
* * `'MMMMM'`: Month in year (January‒December)
235+
* * `'MMM'`: Month in year (Jan - Dec)
212236
* * `'MM'`: Month in year, padded (01‒12)
213237
* * `'M'`: Month in year (1‒12)
214238
* * `'dd'`: Day in month, padded (01‒31)
215239
* * `'d'`: Day in month (1-31)
240+
* * `'EEEE'`: Day in Week,(Sunday‒Saturday)
241+
* * `'EEE'`: Day in Week, (Sun-Sat)
216242
* * `'HH'`: Hour in day, padded (00‒23)
217243
* * `'H'`: Hour in day (0-23)
218244
* * `'hh'`: Hour in am/pm, padded (01‒12)

test/FiltersSpec.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,12 @@ describe('filter', function() {
149149

150150
expect(filter.date(noon, "yyyy-MM-dd hh=HH:mm:ssaZ")).
151151
toEqual('2010-09-03 12=12:05:08pm0500');
152+
153+
expect(filter.date(noon, "EEE, MMM d, yyyy")).
154+
toEqual('Fri, Sep 3, 2010');
155+
156+
expect(filter.date(noon, "EEEE, MMMMM dd, yyyy")).
157+
toEqual('Friday, September 03, 2010');
152158
});
153159

154160
it('should be able to parse ISO 8601 dates/times using', function() {

0 commit comments

Comments
 (0)