-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdateRange.js
More file actions
82 lines (78 loc) · 2.3 KB
/
dateRange.js
File metadata and controls
82 lines (78 loc) · 2.3 KB
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
71
72
73
74
75
76
77
78
79
80
81
82
'use strict';
const DATE_FILTERS = [
{ value: 'last_hour', label: 'Last Hour' },
{ value: 'today', label: 'Today' },
{ value: 'yesterday', label: 'Yesterday' },
{ value: 'thisWeek', label: 'This Week' },
{ value: 'lastWeek', label: 'Last Week' },
{ value: 'thisMonth', label: 'This Month' },
{ value: 'lastMonth', label: 'Last Month' }
];
const DATE_FILTER_VALUES = DATE_FILTERS.map(f => f.value);
/**
* Returns { start, end } Date objects for a given range key (e.g. 'last_hour', 'today').
* Month ranges use UTC boundaries.
* @param {string} selectedRange - One of DATE_FILTER_VALUES
* @returns {{ start: Date, end: Date }}
*/
function getDateRangeForRange(selectedRange) {
const now = new Date();
let start, end;
switch (selectedRange) {
case 'last_hour':
start = new Date();
start.setHours(start.getHours() - 1);
end = new Date();
break;
case 'today':
start = new Date();
start.setHours(0, 0, 0, 0);
end = new Date();
end.setHours(23, 59, 59, 999);
break;
case 'yesterday':
start = new Date(now);
start.setDate(start.getDate() - 1);
start.setHours(0, 0, 0, 0);
end = new Date(start);
end.setHours(23, 59, 59, 999);
break;
case 'thisWeek':
start = new Date(now.getTime() - (7 * 86400000));
start.setHours(0, 0, 0, 0);
end = new Date();
end.setHours(23, 59, 59, 999);
break;
case 'lastWeek':
start = new Date(now.getTime() - (14 * 86400000));
start.setHours(0, 0, 0, 0);
end = new Date(now.getTime() - (7 * 86400000));
end.setHours(23, 59, 59, 999);
break;
case 'thisMonth': {
const y = now.getUTCFullYear();
const m = now.getUTCMonth();
start = new Date(Date.UTC(y, m, 1, 0, 0, 0, 0));
end = new Date(Date.UTC(y, m + 1, 0, 23, 59, 59, 999));
break;
}
case 'lastMonth': {
const y = now.getUTCFullYear();
const m = now.getUTCMonth();
start = new Date(Date.UTC(y, m - 1, 1, 0, 0, 0, 0));
end = new Date(Date.UTC(y, m, 0, 23, 59, 59, 999));
break;
}
default:
start = new Date();
start.setHours(start.getHours() - 1);
end = new Date();
break;
}
return { start, end };
}
module.exports = {
DATE_FILTERS,
DATE_FILTER_VALUES,
getDateRangeForRange
};