Skip to content

Commit 09da26d

Browse files
committed
export daterange as a function
1 parent 251f275 commit 09da26d

1 file changed

Lines changed: 50 additions & 33 deletions

File tree

src/danfojs-base/core/daterange.ts

Lines changed: 50 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { ArrayType1D, ArrayType2D } from "../shared/types"
21
import Utils from "../shared/utils";
32

43
const 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

Comments
 (0)