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