45 lines
1.8 KiB
JavaScript
45 lines
1.8 KiB
JavaScript
var parse = require('../parse/index.js')
|
|
|
|
/**
|
|
* @category Range Helpers
|
|
* @summary Is the given date range overlapping with another date range?
|
|
*
|
|
* @description
|
|
* Is the given date range overlapping with another date range?
|
|
*
|
|
* @param {Date|String|Number} initialRangeStartDate - the start of the initial range
|
|
* @param {Date|String|Number} initialRangeEndDate - the end of the initial range
|
|
* @param {Date|String|Number} comparedRangeStartDate - the start of the range to compare it with
|
|
* @param {Date|String|Number} comparedRangeEndDate - the end of the range to compare it with
|
|
* @returns {Boolean} whether the date ranges are overlapping
|
|
* @throws {Error} startDate of a date range cannot be after its endDate
|
|
*
|
|
* @example
|
|
* // For overlapping date ranges:
|
|
* areRangesOverlapping(
|
|
* new Date(2014, 0, 10), new Date(2014, 0, 20), new Date(2014, 0, 17), new Date(2014, 0, 21)
|
|
* )
|
|
* //=> true
|
|
*
|
|
* @example
|
|
* // For non-overlapping date ranges:
|
|
* areRangesOverlapping(
|
|
* new Date(2014, 0, 10), new Date(2014, 0, 20), new Date(2014, 0, 21), new Date(2014, 0, 22)
|
|
* )
|
|
* //=> false
|
|
*/
|
|
function areRangesOverlapping (dirtyInitialRangeStartDate, dirtyInitialRangeEndDate, dirtyComparedRangeStartDate, dirtyComparedRangeEndDate) {
|
|
var initialStartTime = parse(dirtyInitialRangeStartDate).getTime()
|
|
var initialEndTime = parse(dirtyInitialRangeEndDate).getTime()
|
|
var comparedStartTime = parse(dirtyComparedRangeStartDate).getTime()
|
|
var comparedEndTime = parse(dirtyComparedRangeEndDate).getTime()
|
|
|
|
if (initialStartTime > initialEndTime || comparedStartTime > comparedEndTime) {
|
|
throw new Error('The start of the range cannot be after the end of the range')
|
|
}
|
|
|
|
return initialStartTime < comparedEndTime && comparedStartTime < initialEndTime
|
|
}
|
|
|
|
module.exports = areRangesOverlapping
|