You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					89 lines
				
				2.7 KiB
			
		
		
			
		
	
	
					89 lines
				
				2.7 KiB
			| 
											3 years ago
										 | import toDate from '../toDate/index.js'; | ||
|  | import requiredArgs from '../_lib/requiredArgs/index.js'; | ||
|  | /** | ||
|  |  * @name isWithinInterval | ||
|  |  * @category Interval Helpers | ||
|  |  * @summary Is the given date within the interval? | ||
|  |  * | ||
|  |  * @description | ||
|  |  * Is the given date within the interval? (Including start and end.) | ||
|  |  * | ||
|  |  * ### 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|Number} date - the date to check | ||
|  |  * @param {Interval} interval - the interval to check | ||
|  |  * @returns {Boolean} the date is within the interval | ||
|  |  * @throws {TypeError} 2 arguments required | ||
|  |  * @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
 | ||
|  |  * | ||
|  |  * @example | ||
|  |  * // For date equal to interval start:
 | ||
|  |  * isWithinInterval(date, { start, end: date }) // => true
 | ||
|  |  * | ||
|  |  * @example | ||
|  |  * // For date equal to interval end:
 | ||
|  |  * isWithinInterval(date, { start: date, end }) // => true
 | ||
|  |  */ | ||
|  | 
 | ||
|  | export default function isWithinInterval(dirtyDate, dirtyInterval) { | ||
|  |   requiredArgs(2, arguments); | ||
|  |   var interval = dirtyInterval || {}; | ||
|  |   var time = toDate(dirtyDate).getTime(); | ||
|  |   var startTime = toDate(interval.start).getTime(); | ||
|  |   var endTime = toDate(interval.end).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; | ||
|  | } |