/ aggregation.js
aggregation.js
 1  const MILLISECONDS_PER_MINUTE = 1000 * 60
 2  const MILLISECONDS_PER_HOUR = MILLISECONDS_PER_MINUTE * 60
 3  const MILLISECONDS_PER_DAY = MILLISECONDS_PER_HOUR * 24
 4  
 5  function lastNByPeriod(n, period) {
 6    const now = new Date().getTime()
 7    return [...Array(n).keys()].map(i => new moment(now - i * period))
 8  }
 9  
10  function lastNDays(n) {
11    return lastNByPeriod(n, MILLISECONDS_PER_DAY).map(day => [day.clone().startOf('day'), day.clone().endOf('day')])
12  }
13  
14  function lastNHours(n) {
15    return lastNByPeriod(n, MILLISECONDS_PER_HOUR).map(hour => [hour.clone().startOf('hour'), hour.clone().endOf('hour')])
16  }
17  
18  function lastNMinutes(n) {
19    return lastNByPeriod(n, MILLISECONDS_PER_MINUTE).map(min => [min.clone().startOf('hour'), min.clone().endOf('hour')])
20  }