forked from alexbosworth/balanceofsatoshis
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrange_for_date.js
70 lines (55 loc) · 1.42 KB
/
range_for_date.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
const moment = require('moment');
const {monthNumbers} = require('./constants');
const {monthOffset} = require('./constants');
const {notFoundIndex} = require('./constants');
/** Get a before and after range
{
[date]: <Day of Month String>
[month]: <Month String>
[year]: <Year String>
}
@throws
<Error>
@returns
{
[after]: <After ISO 8601 Date String>
[before]: <Before ISO 8601 Date String>
}
*/
module.exports = ({date, month, year}) => {
if (!date && !year && !month) {
return {};
}
const after = moment.utc().startOf('year');
if (!!year) {
after.year(year);
}
try {
after.toISOString();
} catch (err) {
throw new Error('UnrecognizedFormatForAccountingYear');
}
const end = after.clone();
if (!!month && monthNumbers.indexOf(month) !== notFoundIndex) {
[after, end].forEach(n => n.month(Number(month) - monthOffset));
} else if (!!month) {
[after, end].forEach(n => n.month(month));
}
if (!!date) {
[after, end].forEach(n => n.date(date));
}
if (!!date) {
end.add([date].length, 'day');
} else if (!!month) {
end.add([month].length, 'months');
} else {
end.add([after].length, 'years');
}
try {
after.toISOString();
} catch (err) {
throw new Error('UnrecognizedFormatForAccountingMonth');
}
after.subtract([after].length, 'millisecond');
return {after: after.toISOString(), before: end.toISOString()};
};