📅  最后修改于: 2023-12-03 15:26:47.463000             🧑  作者: Mango
在开发过程中,经常需要检查两个日期范围是否有重叠,以便进行相应的处理。本文将介绍如何用 JavaScript 来检查两个日期范围是否存在冲突。
假设我们有两个日期范围 A 和 B,表示为:
const rangeA = {
start: new Date('2022-01-01'),
end: new Date('2022-01-05')
};
const rangeB = {
start: new Date('2022-01-03'),
end: new Date('2022-01-07')
};
要检查这两个范围是否存在冲突,我们可以使用以下逻辑:
function checkRangeConflict(rangeA, rangeB) {
return (
(rangeA.start <= rangeB.end && rangeA.start >= rangeB.start) || // A start 在 B 中间
(rangeA.end <= rangeB.end && rangeA.end >= rangeB.start) || // A end 在 B 中间
(rangeB.start <= rangeA.end && rangeB.start >= rangeA.start) || // B start 在 A 中间
(rangeB.end <= rangeA.end && rangeB.end >= rangeA.start) // B end 在 A 中间
);
}
console.log(checkRangeConflict(rangeA, rangeB)); // true
以上代码中,checkRangeConflict
函数接受两个参数 rangeA 和 rangeB,返回一个布尔值。如果两个范围存在冲突,则返回 true,否则返回 false。
我们可以通过比较日期范围的起始日期和结束日期,来判断它们是否有重叠。如果存在任何一种情况,其中一个范围的起始日期在另一个范围的中间,或者其中一个范围的结束日期在另一个范围的中间,我们就可以确定它们存在冲突。
上文介绍了如何通过 JavaScript 来检查两个日期范围是否存在冲突。我们可以通过判断两个范围的起始日期和结束日期是否存在重叠,来确定它们是否有冲突。
返回的代码片段如下:
/**
* 检查两个日期范围是否存在冲突
* @param {Object} rangeA - 日期范围 A
* @param {Object} rangeB - 日期范围 B
* @returns {boolean} 是否存在冲突
*/
function checkRangeConflict(rangeA, rangeB) {
return (
(rangeA.start <= rangeB.end && rangeA.start >= rangeB.start) ||
(rangeA.end <= rangeB.end && rangeA.end >= rangeB.start) ||
(rangeB.start <= rangeA.end && rangeB.start >= rangeA.start) ||
(rangeB.end <= rangeA.end && rangeB.end >= rangeA.start)
);
}