UNPKG

time-series-generator

Version:

Generate time series given start, end and a time window

95 lines (94 loc) 3.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); /** * Generate series of time. * @param options { * - @param {Date} startDate: begining of the period * - @param {Date} endDate: end of the period * - @param {GenerateTimeSeriesInterval} interval * - @param {number} intervalValue (optional) * - @param {boolean} floorInput (optional) floor date inputs (i.e when interval is "minute", set all "minute", "second", "millisecond" to 0) * } * @returns {GenerateTimeSeriesResults} array of { startDate: Date, endDate: Date } */ function GenerateTimeSeries(options) { var _a = options.startDate, startDate = _a === void 0 ? new Date() : _a, _b = options.endDate, endDate = _b === void 0 ? new Date() : _b, interval = options.interval, intervalValue = options.intervalValue, _c = options.floorInput, floorInput = _c === void 0 ? true : _c; var start = new Date(Math.min(startDate.getTime(), endDate.getTime())); var end = new Date(Math.max(startDate.getTime(), endDate.getTime())); if (floorInput) { switch (interval) { case "year": start.setMonth(0); end.setMonth(0); case "month": case "week": case "day": start.setHours(0, 0, 0, 0); end.setHours(0, 0, 0, 0); break; case "hour": start.setMinutes(0, 0, 0); end.setMinutes(0, 0, 0); break; case "minute": start.setSeconds(0, 0); end.setSeconds(0, 0); break; case "second": start.setMilliseconds(0); end.setMilliseconds(0); break; } } var startTime = new Date(start); var data = []; var last = new Date(start); var endMs = end.getTime(); while (last.getTime() < endMs) { last = increase({ date: last, interval: interval, intervalValue: intervalValue }); data.push({ startDate: startTime, endDate: last }); startTime = last; } return data; } exports.default = GenerateTimeSeries; /** * Increase a date value by given interval options. * @param opts * @returns {Date} a new Date object */ function increase(opts) { var cloned = new Date(opts.date); var _a = opts.intervalValue, intervalValue = _a === void 0 ? 1 : _a; switch (opts.interval) { case "millisecond": cloned.setMilliseconds(cloned.getMilliseconds() + intervalValue); break; case "second": cloned.setSeconds(cloned.getSeconds() + intervalValue); break; case "minute": cloned.setMinutes(cloned.getMinutes() + intervalValue); break; case "hour": cloned.setHours(cloned.getHours() + intervalValue); break; case "day": cloned.setDate(cloned.getDate() + intervalValue); break; case "week": cloned.setDate(cloned.getDate() + (7 * intervalValue)); break; case "month": cloned.setMonth(cloned.getMonth() + intervalValue); break; case "year": cloned.setFullYear(cloned.getFullYear() + intervalValue); break; } return cloned; }