diff options
Diffstat (limited to 'src/filters.js')
| -rw-r--r-- | src/filters.js | 53 |
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) { |
