@@ -42,37 +42,49 @@ function padNumber(num, digits, trim) {
4242 num = num . substr ( num . length - digits ) ;
4343 return neg + num ;
4444}
45- function dateGetter ( name , size , option ) {
45+ function dateGetter ( name , size , offset , trim ) {
4646 return function ( date ) {
47- var value = date [ name ] . call ( date ) + 1 * ( option === 1 ) ;
48- if ( option == - 12 && value > 12 ) value += option ;
49- return padNumber ( value , size , option === true ) ;
47+ var value = date [ 'get' + name ] . call ( date ) ;
48+ if ( offset > 0 || value > - offset )
49+ value += offset ;
50+ if ( value == 0 && offset == - 12 ) value = 12 ;
51+ return padNumber ( value , size , trim ) ;
5052 } ;
5153}
5254var DATE_FORMATS = {
53- yyyy : dateGetter ( 'getFullYear' , 4 ) ,
54- yy : dateGetter ( 'getFullYear' , 2 , true ) ,
55- MM : dateGetter ( 'getMonth' , 2 , 1 ) ,
56- dd : dateGetter ( 'getDate' , 2 ) ,
57- HH : dateGetter ( 'getHours' , 2 ) ,
58- KK : dateGetter ( 'getHours' , 2 , - 12 ) ,
59- mm : dateGetter ( 'getMinutes' , 2 ) ,
60- ss : dateGetter ( 'getSeconds' , 2 ) ,
55+ yyyy : dateGetter ( 'FullYear' , 4 ) ,
56+ yy : dateGetter ( 'FullYear' , 2 , 0 , true ) ,
57+ MM : dateGetter ( 'Month' , 2 , 1 ) ,
58+ M : dateGetter ( 'Month' , 1 , 1 ) ,
59+ dd : dateGetter ( 'Date' , 2 ) ,
60+ d : dateGetter ( 'Date' , 1 ) ,
61+ HH : dateGetter ( 'Hours' , 2 ) ,
62+ H : dateGetter ( 'Hours' , 1 ) ,
63+ hh : dateGetter ( 'Hours' , 2 , - 12 ) ,
64+ h : dateGetter ( 'Hours' , 1 , - 12 ) ,
65+ mm : dateGetter ( 'Minutes' , 2 ) ,
66+ m : dateGetter ( 'Minutes' , 1 ) ,
67+ ss : dateGetter ( 'Seconds' , 2 ) ,
68+ s : dateGetter ( 'Seconds' , 1 ) ,
6169 a : function ( date ) { return date . getHours ( ) < 12 ? 'am' : 'pm' ; } ,
6270 Z : function ( date ) {
6371 var offset = date . getTimezoneOffset ( ) ;
6472 return padNumber ( offset / 60 , 2 ) + padNumber ( Math . abs ( offset % 60 ) , 2 ) ;
6573 }
6674} ;
67- var DATE_FORMATS_SPLIT = new RegExp ( '(' +
68- map ( DATE_FORMATS , function ( value , key ) { return key ; } ) . join ( '|' ) + ')' ) ;
75+ var DATE_FORMATS_SPLIT = / ( [ ^ y M d H h m s a Z ] * ) ( y + | M + | d + | H + | h + | m + | s + | a | Z ) ( .* ) / ;
6976
7077angularFilter . date = function ( date , format ) {
7178 if ( ! date instanceof Date ) return date ;
7279 var text = date . toLocaleDateString ( ) , fn ;
7380 if ( format && isString ( format ) ) {
7481 text = '' ;
75- foreach ( format . split ( DATE_FORMATS_SPLIT ) , function ( value ) {
82+ var parts = [ ] ;
83+ while ( format ) {
84+ parts = concat ( parts , DATE_FORMATS_SPLIT . exec ( format ) , 1 ) ;
85+ format = parts . pop ( ) ;
86+ }
87+ foreach ( parts , function ( value ) {
7688 fn = DATE_FORMATS [ value ] ;
7789 text += fn ? fn ( date ) : value ;
7890 } ) ;
0 commit comments