text: import toDate from '../toDate/index.js'
  
  /**
   * @name eachDayOfInterval
   * @category Interval Helpers
   * @summary Return the array of dates within the specified time interval.
   *
   * @description
   * Return the array of dates within the specified time 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 `eachDay` to `eachDayOfInterval`.
   *   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
   *
   *   eachDay(new Date(2014, 0, 10), new Date(2014, 0, 20))
   *
   *   // v2.0.0 onward
   *
   *   eachDayOfInterval(
   *     { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) }
   *   )
   *   ```
   *
   * @param {Interval} interval - the interval. See [Interval]{@link docs/types/Interval}
   * @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 {Date[]} the array with starts of days from the day of the interval start to the day of the interval end
   * @throws {TypeError} 1 argument 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
   * // Each day between 6 October 2014 and 10 October 2014:
   * var result = eachDayOfInterval({
   *   start: new Date(2014, 9, 6),
   *   end: new Date(2014, 9, 10)
   * })
   * //=> [
   * //   Mon Oct 06 2014 00:00:00,
   * //   Tue Oct 07 2014 00:00:00,
   * //   Wed Oct 08 2014 00:00:00,
   * //   Thu Oct 09 2014 00:00:00,
   * //   Fri Oct 10 2014 00:00:00
   * // ]
   */
  export default function eachDayOfInterval(dirtyInterval, dirtyOptions) {
    if (arguments.length < 1) {
      throw new TypeError(
        '1 argument required, but only ' + arguments.length + ' present'
      )
    }
  
    var interval = dirtyInterval || {}
    var startDate = toDate(interval.start, dirtyOptions)
    var endDate = toDate(interval.end, dirtyOptions)
  
    var endTime = endDate.getTime()
  
    // Throw an exception if start date is after end date or if any date is `Invalid Date`
    if (!(startDate.getTime() <= endTime)) {
      throw new RangeError('Invalid interval')
    }
  
    var dates = []
  
    var currentDate = startDate
    currentDate.setHours(0, 0, 0, 0)
  
    while (currentDate.getTime() <= endTime) {
      dates.push(toDate(currentDate, dirtyOptions))
      currentDate.setDate(currentDate.getDate() + 1)
    }
  
    return dates
  }
  