intersection(other) {
    if (!this.isValid) return this;
    const s = this.s > other.s ? this.s : other.s,
      e = this.e < other.e ? this.e : other.e;

    if (s >= e) {
      return null;
    } else {
      return Interval.fromDateTimes(s, e);
    }
  }
Return an Interval representing the intersection of this Interval and the specified Interval.
Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals.
Returns null if the intersection is empty, meaning, the intervals don't intersect.
@param {Interval} other
@return {Interval}