@@ -5,59 +5,18 @@ angular.module( 'angularUtils.filters.ordinalDate', [] )
5
5
var getOrdinalSuffix = function ( number ) {
6
6
var suffixes = [ "'th'" , "'st'" , "'nd'" , "'rd'" ] ;
7
7
var relevantDigits = ( number < 30 ) ? number % 20 : number % 30 ;
8
- return ( relevantDigits <= 3 ) ? suffixes [ relevantDigits ] : suffixes [ 0 ] ;
9
- } ;
10
-
11
- /**
12
- * Look through the format string for any possible match for 'd'.
13
- * It needs to ignore 'dd' and also occurrences of the letter d inside
14
- * string such as "d 'day of' MM'.
15
- * @param format
16
- */
17
- var getIndecesOfDayCharacter = function ( format ) {
18
- var dayRegex = / (?: ' (?: [ ^ ' ] | ' ' ) * ' ) | (?: d + ) / g;
19
- var matchingIndices = [ ] ;
20
- var finishedLooking = false ;
21
-
22
- while ( ! finishedLooking ) {
23
- var matches = dayRegex . exec ( format ) ;
24
- if ( matches ) {
25
- dayRegex . lastIndex = matches . index + matches [ 0 ] . length ;
26
- if ( matches [ 0 ] === 'd' ) {
27
- matchingIndices . push ( matches . index + 1 ) ;
28
- }
29
- } else {
30
- finishedLooking = true ;
31
- }
32
- }
33
-
34
- return matchingIndices ;
35
- } ;
36
-
37
- /**
38
- * Insert a string at a given index of another string
39
- * @param inputString
40
- * @param index
41
- * @param stringToInsert
42
- * @returns {string }
43
- */
44
- var insertAtIndex = function ( inputString , index , stringToInsert ) {
45
- var partBeforeIndex = inputString . substring ( 0 , index ) ;
46
- var partAfterIndex = inputString . substring ( index , inputString . length ) ;
47
- return partBeforeIndex + stringToInsert + partAfterIndex ;
8
+ return "d" + ( ( relevantDigits <= 3 ) ? suffixes [ relevantDigits ] : suffixes [ 0 ] ) ;
48
9
} ;
49
10
50
11
return function ( timestamp , format ) {
12
+ var regex = / d + ( (? ! \w * (? = ' ) ) ) | d $ / g;
51
13
var date = new Date ( timestamp ) ;
52
14
var dayOfMonth = date . getDate ( ) ;
53
15
var suffix = getOrdinalSuffix ( dayOfMonth ) ;
54
16
55
- var matchingIndices = getIndecesOfDayCharacter ( format ) ;
56
-
57
- // now we to insert the suffix at the index(-ces) that we found
58
- for ( var i = matchingIndices . length ; i > 0 ; i -- ) {
59
- format = insertAtIndex ( format , matchingIndices [ i - 1 ] , suffix ) ;
60
- }
17
+ format = format . replace ( regex , ( match ) => {
18
+ return match === "d" ? suffix : match ;
19
+ } ) ;
61
20
return $filter ( 'date' ) ( date , format ) ;
62
21
} ;
63
22
} ] ) ;
0 commit comments