時間間隔をちょっと考えて

時間間隔をちょっと考えて

class DateInterval {
  constructor (begin, end) {
    this.begin = begin;
    this.end   = end;
  }
  
  isInRange (date = new Date) {
    let b = +this.begin, e = +this.end, d = +date;
    return b <= d ? d <= e: false;
  }
  
  copy () {
    return new DateInterval (new Date (this.begin), new Date (this.end));
  }
  
  static range (...arg) {
    let [s, m, h, d] = [...arg.reverse (), 0, 0, 0, 0];
    if (31 < d) throw new Error;
    return new Date (Date.UTC (1970, 0, d + 1, h, m, s, (s % 1 * 1000)));
  }
  
  static split (dateInterval, date) {
    let rst = [ ], max = +dateInterval.end, step = +date;
    for (let i = new Date (dateInterval.begin); i < max; i.setTime (+i +step))
      rst.push (new Date (i));
    return rst;
  }
  
  static create (a, b) {
    return new DateInterval (new Date (...a), new Date (...b));
  }
}

let a = DateInterval.range (1,0,0);
let b = DateInterval.create ([1,0,1], [1,0,2]);

console.log (DateInterval.split (b, a));