📜  检查日期冲突 js - Javascript (1)

📅  最后修改于: 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)
  );
}