| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- define([
- 'kbn'
- ],
- function (kbn) {
- 'use strict';
- /**
- * manages the interval logic
- * @param {[type]} interval_string An interval string in the format '1m', '1y', etc
- */
- function Interval(interval_string) {
- this.string = interval_string;
- var info = kbn.describe_interval(interval_string);
- this.type = info.type;
- this.ms = info.sec * 1000 * info.count;
- // does the length of the interval change based on the current time?
- if (this.type === 'y' || this.type === 'M') {
- // we will just modify this time object rather that create a new one constantly
- this.get = this.get_complex;
- this.date = new Date(0);
- } else {
- this.get = this.get_simple;
- }
- }
- Interval.prototype = {
- toString: function () {
- return this.string;
- },
- after: function(current_ms) {
- return this.get(current_ms, 1);
- },
- before: function (current_ms) {
- return this.get(current_ms, -1);
- },
- get_complex: function (current, delta) {
- this.date.setTime(current);
- switch(this.type) {
- case 'M':
- this.date.setUTCMonth(this.date.getUTCMonth() + delta);
- break;
- case 'y':
- this.date.setUTCFullYear(this.date.getUTCFullYear() + delta);
- break;
- }
- return this.date.getTime();
- },
- get_simple: function (current, delta) {
- return current + (delta * this.ms);
- }
- };
- return Interval;
- });
|