@@ -111,3 +111,43 @@ export const countTeeByDate = (
111111 . map ( ( [ dateLabel , count ] ) => ( { dateLabel, count } ) )
112112 . sort ( ( a , b ) => a . dateLabel . localeCompare ( b . dateLabel ) ) ;
113113} ;
114+
115+ export const countTeeInTheOldDays = (
116+ dailyTeeCount : {
117+ dateLabel : string ;
118+ count : number ;
119+ } [ ]
120+ ) => {
121+ const DURATION = 30 ;
122+
123+ const minDateLabel = dailyTeeCount [ 0 ] . dateLabel ;
124+ const maxDateLabel = dailyTeeCount [ dailyTeeCount . length - 1 ] . dateLabel ;
125+ const dateDelta =
126+ ( + new Date ( maxDateLabel ) - + new Date ( minDateLabel ) ) / 1000 / 86400 ;
127+
128+ const differentiatedTees = Array . from ( Array ( dateDelta ) ) . map ( ( __ , i ) => {
129+ const nextDate = new Date ( minDateLabel ) ;
130+ nextDate . setDate ( nextDate . getDate ( ) + i ) ;
131+ const nextDateLabel = nextDate . toISOString ( ) . substring ( 0 , 10 ) ;
132+ const found = dailyTeeCount . find ( ( tee ) => tee . dateLabel === nextDateLabel ) ;
133+ if ( found ) {
134+ return found ;
135+ } else {
136+ return { dateLabel : nextDateLabel , count : 0 } ;
137+ }
138+ } ) ;
139+
140+ return differentiatedTees
141+ . map ( ( { dateLabel } , i ) => {
142+ const dateSecond = parseDateLabel ( dateLabel ) . unix ( ) ;
143+ const begin = Math . max ( i - ( DURATION - 1 ) , 0 ) ;
144+ const total = differentiatedTees
145+ . slice ( begin , i + 1 )
146+ . reduce ( ( tot , data ) => data . count + tot , 0 ) ;
147+ if ( ! total ) {
148+ return null ;
149+ }
150+ return { dateSecond, count : total } ;
151+ } )
152+ . filter ( ( data ) => ! ! data ) as { dateSecond : number ; count : number } [ ] ;
153+ } ;
0 commit comments