mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-04-24 16:44:45 +00:00
fixed date formater and make it work on ie
This commit is contained in:
parent
f8865459d5
commit
b96f736951
2 changed files with 48 additions and 23 deletions
|
|
@ -42,37 +42,49 @@ function padNumber(num, digits, trim) {
|
||||||
num = num.substr(num.length - digits);
|
num = num.substr(num.length - digits);
|
||||||
return neg + num;
|
return neg + num;
|
||||||
}
|
}
|
||||||
function dateGetter(name, size, option) {
|
function dateGetter(name, size, offset, trim) {
|
||||||
return function(date) {
|
return function(date) {
|
||||||
var value = date[name].call(date) + 1*(option===1);
|
var value = date['get' + name].call(date);
|
||||||
if (option == -12 && value > 12) value += option;
|
if (offset > 0 || value > -offset)
|
||||||
return padNumber(value, size, option === true);
|
value += offset;
|
||||||
|
if (value == 0 && offset == -12 ) value = 12;
|
||||||
|
return padNumber(value, size, trim);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
var DATE_FORMATS = {
|
var DATE_FORMATS = {
|
||||||
yyyy: dateGetter('getFullYear', 4),
|
yyyy: dateGetter('FullYear', 4),
|
||||||
yy: dateGetter('getFullYear', 2, true),
|
yy: dateGetter('FullYear', 2, 0, true),
|
||||||
MM: dateGetter('getMonth', 2, 1),
|
MM: dateGetter('Month', 2, 1),
|
||||||
dd: dateGetter('getDate', 2),
|
M: dateGetter('Month', 1, 1),
|
||||||
HH: dateGetter('getHours', 2),
|
dd: dateGetter('Date', 2),
|
||||||
KK: dateGetter('getHours', 2, -12),
|
d: dateGetter('Date', 1),
|
||||||
mm: dateGetter('getMinutes', 2),
|
HH: dateGetter('Hours', 2),
|
||||||
ss: dateGetter('getSeconds', 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'; },
|
a: function(date){return date.getHours() < 12 ? 'am' : 'pm'; },
|
||||||
Z: function(date){
|
Z: function(date){
|
||||||
var offset = date.getTimezoneOffset();
|
var offset = date.getTimezoneOffset();
|
||||||
return padNumber(offset / 60, 2) + padNumber(Math.abs(offset % 60), 2);
|
return padNumber(offset / 60, 2) + padNumber(Math.abs(offset % 60), 2);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
var DATE_FORMATS_SPLIT = new RegExp('('+
|
var DATE_FORMATS_SPLIT = /([^yMdHhmsaZ]*)(y+|M+|d+|H+|h+|m+|s+|a|Z)(.*)/;
|
||||||
map(DATE_FORMATS, function(value, key){return key;}).join('|')+')');
|
|
||||||
|
|
||||||
angularFilter.date = function(date, format) {
|
angularFilter.date = function(date, format) {
|
||||||
if (!date instanceof Date) return date;
|
if (!date instanceof Date) return date;
|
||||||
var text = date.toLocaleDateString(), fn;
|
var text = date.toLocaleDateString(), fn;
|
||||||
if (format && isString(format)) {
|
if (format && isString(format)) {
|
||||||
text = '';
|
text = '';
|
||||||
foreach(format.split(DATE_FORMATS_SPLIT), function(value){
|
var parts = [];
|
||||||
|
while(format) {
|
||||||
|
parts = concat(parts, DATE_FORMATS_SPLIT.exec(format), 1);
|
||||||
|
format = parts.pop();
|
||||||
|
}
|
||||||
|
foreach(parts, function(value){
|
||||||
fn = DATE_FORMATS[value];
|
fn = DATE_FORMATS[value];
|
||||||
text += fn ? fn(date) : value;
|
text += fn ? fn(date) : value;
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -87,21 +87,34 @@ describe('filter', function(){
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('date', function(){
|
describe('date', function(){
|
||||||
var date = angular.String.toDate('2010-10-13T14:45:23Z');
|
var morning = angular.String.toDate('2010-09-03T23:05:08Z');
|
||||||
|
var midnight = angular.String.toDate('2010-09-03T23:05:08Z');
|
||||||
|
var noon = angular.String.toDate('2010-09-03T23:05:08Z');
|
||||||
|
morning.setHours(7);
|
||||||
|
noon.setHours(12);
|
||||||
|
midnight.setHours(0);
|
||||||
|
|
||||||
//butt-ugly hack: force the date to be 2pm PDT for locale testing
|
//butt-ugly hack: force the date to be 2pm PDT for locale testing
|
||||||
date.setHours(14);
|
morning.getTimezoneOffset =
|
||||||
date.getTimezoneOffset = function() { return 7 * 60; };
|
noon.getTimezoneOffset =
|
||||||
|
midnight.getTimezoneOffset =
|
||||||
|
function() { return 7 * 60; };
|
||||||
|
|
||||||
it('should do basic filter', function() {
|
it('should do basic filter', function() {
|
||||||
expect(filter.date(date)).toEqual(date.toLocaleDateString());
|
expect(filter.date(noon)).toEqual(noon.toLocaleDateString());
|
||||||
expect(filter.date(date, '')).toEqual(date.toLocaleDateString());
|
expect(filter.date(noon, '')).toEqual(noon.toLocaleDateString());
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should accept format', function() {
|
it('should accept format', function() {
|
||||||
expect(filter.date(date, "yyyy-MM-dd HH:mm:ss")).toEqual('2010-10-13 14:45:23');
|
expect(filter.date(midnight, "yyyy-M-d h=H:m:saZ")).
|
||||||
expect(filter.date(date, "yy-MM-dd KK:mm:ssaZ")).toEqual('10-10-13 02:45:23pm0700');
|
toEqual('2010-9-3 12=0:5:8am0700');
|
||||||
|
|
||||||
|
expect(filter.date(midnight, "yyyy-MM-dd hh=HH:mm:ssaZ")).
|
||||||
|
toEqual('2010-09-03 12=00:05:08am0700');
|
||||||
|
|
||||||
|
expect(filter.date(noon, "yyyy-MM-dd hh=HH:mm:ssaZ")).
|
||||||
|
toEqual('2010-09-03 12=12:05:08pm0700');
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue