Skip to content

Commit 47438b9

Browse files
authored
Merge pull request #313 from p0vidl0/dev
[enhancement] Support freq offset above 10 and above for date_range()
2 parents 4a4d459 + 98af834 commit 47438b9

File tree

4 files changed

+46
-6
lines changed

4 files changed

+46
-6
lines changed

danfojs-browser/src/core/date_range.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,11 @@ export class date_range {
4646
throw new Error(`invalid freq ${this.freq}`);
4747
}
4848
} else {
49-
let freq_split = this.freq.split("");
50-
this.offset = parseInt(freq_split[0]);
51-
this.freq = freq_split[1];
49+
this.offset = parseInt(this.freq.slice(0, -1));
50+
if (!Number.isFinite(this.offset)){
51+
throw new Error(`invalid freq offset ${this.freq.slice(0, -1)}`);
52+
}
53+
this.freq = this.freq.slice(-1);
5254
if (!this.freq_list.includes(this.freq)){
5355
throw new Error(`invalid freq ${this.freq}`);
5456
}

danfojs-browser/tests/core/date_range.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,21 @@ describe("date_range", function(){
4646
assert.deepEqual(d, rslt);
4747

4848

49+
});
50+
it("Obtain date between start with end not specified, but period and freq specified, plus offset, longer freq", function(){
51+
52+
let d = new dfd.date_range({ start:'1/1/2018', period:5, freq:'35m' });
53+
let rslt = [
54+
"1/1/2018, 12:00:00 AM",
55+
"1/1/2018, 12:35:00 AM",
56+
"1/1/2018, 1:10:00 AM",
57+
"1/1/2018, 1:45:00 AM",
58+
"1/1/2018, 2:20:00 AM"
59+
];
60+
61+
assert.deepEqual(d, rslt);
62+
63+
4964
});
5065
it("Obtain date range with start not specified but end and period is given", function(){
5166

@@ -71,4 +86,7 @@ describe("date_range", function(){
7186
it("inputing wrong freq with offset", function(){
7287
assert.throws(function () { new dfd.date_range({ end:'1/1/2018', period:8, freq:"4d" }); }, Error, 'invalid freq d');
7388
});
89+
it("inputing wrong freq offset", function(){
90+
assert.throws(function () { new dfd.date_range({ end:'1/1/2018', period:8, freq:"abcm" }); }, Error, 'invalid freq offset abc');
91+
});
7492
});

danfojs-node/src/core/date_range.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,11 @@ export class date_range {
4646
throw new Error(`invalid freq ${this.freq}`);
4747
}
4848
} else {
49-
let freq_split = this.freq.split("");
50-
this.offset = parseInt(freq_split[0]);
51-
this.freq = freq_split[1];
49+
this.offset = parseInt(this.freq.slice(0, -1));
50+
if (!Number.isFinite(this.offset)){
51+
throw new Error(`invalid freq offset ${this.freq.slice(0, -1)}`);
52+
}
53+
this.freq = this.freq.slice(-1);
5254
if (!this.freq_list.includes(this.freq)){
5355
throw new Error(`invalid freq ${this.freq}`);
5456
}

danfojs-node/tests/core/date_range.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,21 @@ describe("date_range", function(){
4747
assert.deepEqual(d, rslt);
4848

4949

50+
});
51+
it("Obtain date between start with end not specified, but period and freq specified, plus offset, longer freq", function(){
52+
53+
let d = new date_range({ start:'1/1/2018', period:5, freq:'35m' });
54+
let rslt = [
55+
"1/1/2018, 12:00:00 AM",
56+
"1/1/2018, 12:35:00 AM",
57+
"1/1/2018, 1:10:00 AM",
58+
"1/1/2018, 1:45:00 AM",
59+
"1/1/2018, 2:20:00 AM"
60+
];
61+
62+
assert.deepEqual(d, rslt);
63+
64+
5065
});
5166
it("Obtain date range with start not specified but end and period is given", function(){
5267

@@ -72,4 +87,7 @@ describe("date_range", function(){
7287
it("inputing wrong freq with offset", function(){
7388
assert.throws(function () { new date_range({ end:'1/1/2018', period:8, freq:"4d" }); }, Error, 'invalid freq d');
7489
});
90+
it("inputing wrong freq offset", function(){
91+
assert.throws(function () { new date_range({ end:'1/1/2018', period:8, freq:"abcm" }); }, Error, 'invalid freq offset abc');
92+
});
7593
});

0 commit comments

Comments
 (0)