You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断新预订的起止日期是否与已有预订的日期间隔存在重叠

预订时间段重叠校验问题解决方案

现有代码问题根因

你当前编写的判断逻辑newBookingfrom >= oldBooking.From && newBookingTo <= oldBooking.To仅能识别新预订完全包含在已有预订内部这一种重叠场景,遗漏了大量其他重叠情况,包括:

  • 新预订完全包裹已有预订(即你示例中新预订2021-10-09至2021-10-16、已有预订2021-10-10至2021-10-15的场景,现有逻辑无法识别重叠)
  • 新预订起始时间落在已有预订区间内、结束时间晚于已有预订结束时间
  • 新预订结束时间落在已有预订区间内、起始时间早于已有预订起始时间

正确的重叠判断逻辑

判断两个时间段是否重叠更简单的方式是反向推导:两个时间段完全不重叠的唯一条件是「新预订结束时间早等于已有预订开始时间」或「新预订开始时间晚等于已有预订结束时间」,对该条件取反即可得到通用的重叠判断规则:
newBookingFrom < oldBooking.To && newBookingTo > oldBooking.From

边界调整提示:如果你的业务允许预订起止日重合(比如酒店预订场景中10月15日退房、10月15日可办理新入住),可以将运算符调整为<=和>=匹配业务规则。

优化后的实现代码

你不需要查询所有重叠的预订记录,只要判断是否存在任意一条重叠记录即可,使用Any()方法可以提前终止遍历,数据量大时性能更优:

// 判断是否存在重叠预订
bool hasOverlappedBooking = _bookingRepository.GetAll()
    .Any(oldBooking => newBookingfrom < oldBooking.To && newBookingTo > oldBooking.From);

// 存在重叠直接返回false
if (hasOverlappedBooking)
{
    return false;
}

内容的提问来源于stack exchange,提问作者KTOV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 07:36:02