aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/filters.js53
1 files changed, 48 insertions, 5 deletions
diff --git a/src/filters.js b/src/filters.js
index f1fc89f1..e2e0e92c 100644
--- a/src/filters.js
+++ b/src/filters.js
@@ -30,12 +30,55 @@ angularFilter.number = function(amount, fractionSize){
}
return text;
};
+function padNumber(num, digits, trim) {
+ var neg = '';
+ if (num < 0) {
+ neg = '-';
+ num = -num;
+ }
+ num = '' + num;
+ while(num.length < digits) num = '0' + num;
+ if (trim)
+ num = num.substr(num.length - digits);
+ return neg + num;
+}
+function dateGetter(name, size, option) {
+ return function(date) {
+ var value = date[name].call(date) + 1*(option===1);
+ if (option == -12 && value > 12) value += option;
+ return padNumber(value, size, option === true);
+ };
+}
+var DATE_FORMATS = {
+ yyyy: dateGetter('getFullYear', 4),
+ yy: dateGetter('getFullYear', 2, true),
+ MM: dateGetter('getMonth', 2, 1),
+ dd: dateGetter('getDate', 2),
+ HH: dateGetter('getHours', 2),
+ KK: dateGetter('getHours', 2, -12),
+ mm: dateGetter('getMinutes', 2),
+ ss: dateGetter('getSeconds', 2),
+ 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 = new RegExp('('+
+ map(DATE_FORMATS, function(value, key){return key;}).join('|')+')');
+console.log(DATE_FORMATS_SPLIT);
-angularFilter.date = function(date) {
- if (date instanceof Date)
- return date.toLocaleDateString();
- else
- return date;
+angularFilter.date = function(date, format) {
+ if (!date instanceof Date) return date;
+ var text = date.toLocaleDateString(), fn;
+ if (format && isString(format)) {
+ text = '';
+ foreach(format.split(DATE_FORMATS_SPLIT), function(value){
+ fn = DATE_FORMATS[value];
+ text += fn ? fn(date) : value;
+ });
+ }
+ return text;
};
angularFilter.json = function(object) {