1- import { ArrayType1D , ArrayType2D } from "../shared/types"
21import Utils from "../shared/utils" ;
32
43const utils = new Utils ( ) ;
@@ -10,20 +9,20 @@ interface Params {
109 freq ?: string ;
1110 period ?: number
1211}
13- export default class DateRange {
14- private offset : number | undefined = null
15- private start : string | undefined
16- private end : string | undefined
17- private freq : string | undefined
18- private period : number | undefined
12+ class DateRange {
13+ private offset ? : number
14+ private start ? : string
15+ private end ? : string
16+ private freq : string
17+ private period ? : number
1918 private freqList : string [ ]
2019
21- constructor ( params : Params ) {
22- this . start = params . start
23- this . end = params . end
24- this . offset = params . offset
25- this . freq = params . freq
26- this . period = params . period
20+ constructor ( { start , end , offset , freq , period } : Params ) {
21+ this . start = start
22+ this . end = end
23+ this . offset = offset
24+ this . freq = freq ? freq : "D"
25+ this . period = period
2726 this . freqList = [ "M" , "D" , "s" , "H" , "m" , "Y" ]
2827
2928 if ( this . freq . length == 1 ) {
@@ -40,11 +39,14 @@ export default class DateRange {
4039 throw new Error ( `invalid freq ${ this . freq } ` ) ;
4140 }
4241 }
43-
44-
42+
4543 }
4644
47- range ( { start, end, period, offset} : Params ) {
45+ range ( ) : string [ ] {
46+ let start = this . start
47+ let period = this . period
48+ let end = this . end
49+ let offset = this . offset
4850 let startDate : Date
4951 let endDate : Date
5052 let startRange : number
@@ -79,6 +81,7 @@ export default class DateRange {
7981 else if ( start && ! ( end ) ) {
8082 startDate = new Date ( start )
8183 startRange = this . freqType ( startDate , this . freq )
84+ period = period as number
8285 endRange = offset ? ( ( period * offset ) - 1 ) : period - 1 ;
8386
8487 if ( startRange > endRange ) {
@@ -96,25 +99,25 @@ export default class DateRange {
9699 let dateString = this . toLocalString ( dateRange )
97100 return dateString
98101 }
99- else if ( end && ! ( start ) ) {
100- endDate = new Date ( end )
101- endRange = this . freqType ( endDate , this . freq )
102- startRange = ( endRange - period ) + 1
103- let rangeArray = utils . range ( startRange , endRange )
104-
105- if ( offset ) {
106- rangeArray = this . offsetCount ( rangeArray , offset )
107- }
108- let dateRange = rangeArray . map ( ( x ) => {
109- return this . setDateProps ( endDate , this . freq , x )
110- } )
111- let dateString = this . toLocalString ( dateRange )
112- return dateString
102+ // if end and not start given
103+ endDate = new Date ( end as string )
104+ endRange = this . freqType ( endDate , this . freq )
105+ period = period as number
106+ startRange = ( endRange - period ) + 1
107+ let rangeArray = utils . range ( startRange , endRange )
108+
109+ if ( offset ) {
110+ rangeArray = this . offsetCount ( rangeArray , offset )
113111 }
112+ let dateRange = rangeArray . map ( ( x ) => {
113+ return this . setDateProps ( endDate , this . freq , x )
114+ } )
115+ let dateString = this . toLocalString ( dateRange )
116+ return dateString
114117 }
115118
116119 private freqType ( date : Date , ftype : string ) : number {
117- let rslt : number = null ;
120+ let rslt : number = 0 ;
118121 switch ( ftype ) {
119122
120123 case "M" :
@@ -154,14 +157,14 @@ export default class DateRange {
154157 case "M" :
155158 if ( Array . isArray ( val ) ) {
156159
157- newDate . setYear ( newDate . getFullYear ( ) + val [ 0 ] ) ;
160+ newDate . setFullYear ( newDate . getFullYear ( ) + val [ 0 ] ) ;
158161 newDate . setMonth ( val [ 1 ] ) ;
159162 } else {
160163 newDate . setMonth ( val ) ;
161164 }
162165 break ;
163166 case "Y" :
164- newDate . setYear ( val as number ) ;
167+ newDate . setFullYear ( val as number ) ;
165168 break ;
166169 case "s" :
167170 newDate . setSeconds ( val as number ) ;
@@ -232,4 +235,18 @@ export default class DateRange {
232235 }
233236 return sum
234237 }
238+ }
239+
240+ /**
241+ *
242+ * @param start : signify the date to start with
243+ * @param end : signify the date to end with
244+ * @param period : the total number of date to generate
245+ * @param offset : set the date range offset
246+ * @param freq: set the date range frequency and offset
247+ * @return string[]
248+ */
249+ export default function date_range ( param : Params ) : string [ ] {
250+ const dateRange = new DateRange ( param )
251+ return dateRange . range ( )
235252}
0 commit comments