text: import toDate from '../toDate/index.js'
  
  /**
   * @name isWithinInterval
   * @category Interval Helpers
   * @summary Is the given date within the interval?
   *
   * @description
   * Is the given date within the interval?
   *
   *
   * ### v2.0.0 breaking changes:
   *
   * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
   *
   * - The function was renamed from `isWithinRange` to `isWithinInterval`.
   *   This change was made to mirror the use of the word "interval" in standard ISO 8601:2004 terminology:
   *
   *   ```
   *   2.1.3
   *   time interval
   *   part of the time axis limited by two instants
   *   ```
   *
   *   Also, this function now accepts an object with `start` and `end` properties
   *   instead of two arguments as an interval.
   *   This function now throws `RangeError` if the start of the interval is after its end
   *   or if any date in the interval is `Invalid Date`.
   *
   *   ```javascript
   *   // Before v2.0.0
   *
   *   isWithinRange(
   *     new Date(2014, 0, 3),
   *     new Date(2014, 0, 1), new Date(2014, 0, 7)
   *   )
   *
   *   // v2.0.0 onward
   *
   *   isWithinInterval(
   *     new Date(2014, 0, 3),
   *     { start: new Date(2014, 0, 1), end: new Date(2014, 0, 7) }
   *   )
   *   ```
   *
   * @param {Date|String|Number} date - the date to check
   * @param {Interval} interval - the interval to check
   * @param {Options} [options] - the object with options. See [Options]{@link https://date-fns.org/docs/Options}
   * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}
   * @returns {Boolean} the date is within the interval
   * @throws {TypeError} 2 arguments required
   * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2
   * @throws {RangeError} The start of an interval cannot be after its end
   * @throws {RangeError} Date in interval cannot be `Invalid Date`
   *
   * @example
   * // For the date within the interval:
   * isWithinInterval(new Date(2014, 0, 3), {
   *   start: new Date(2014, 0, 1),
   *   end: new Date(2014, 0, 7)
   * })
   * //=> true
   *
   * @example
   * // For the date outside of the interval:
   * isWithinInterval(new Date(2014, 0, 10), {
   *   start: new Date(2014, 0, 1),
   *   end: new Date(2014, 0, 7)
   * })
   * //=> false
   */
  export default function isWithinInterval(
    dirtyDate,
    dirtyInterval,
    dirtyOptions
  ) {
    if (arguments.length < 2) {
      throw new TypeError(
        '2 arguments required, but only ' + arguments.length + ' present'
      )
    }
  
    var interval = dirtyInterval || {}
    var time = toDate(dirtyDate, dirtyOptions).getTime()
    var startTime = toDate(interval.start, dirtyOptions).getTime()
    var endTime = toDate(interval.end, dirtyOptions).getTime()
  
    // Throw an exception if start date is after end date or if any date is `Invalid Date`
    if (!(startTime <= endTime)) {
      throw new RangeError('Invalid interval')
    }
  
    return time >= startTime && time <= endTime
  }
  