【问题标题】:Checking if 2 dates is within range of 2 other dates检查 2 个日期是否在 2 个其他日期的范围内
【发布时间】:2021-12-02 09:53:59
【问题描述】:

我有一个预订网络应用程序,其中预订存储起始日期和截止日期。

进行新预订时,我需要检查该预订起止日期是否在任何起止日期的预订范围内。

假设我有一个预订:

A 自日期:2021 年 10 月 10 日 截止日期:2021 年 15 月 10 日

如果我尝试通过以下方式进行新预订:

A 自日期:09/10/2021 截止日期:16/10/2021

那么它应该返回 false

或者,如果我尝试通过以下方式进行新预订:

A 自日期:2021 年 10 月 10 日 截止日期为 2021 年 11 月 10 日

那么它应该返回 false。

到目前为止,这是我所拥有的:

var bookings = _bookingRepository.GetAll().Where(oldBooking => newBookingfrom >= oldBooking.From && newBookingTo <= oldBooking.To);

但这并没有按预期工作,当我第一次接近它时,这似乎很容易,但它让我感到困惑。

仅供参考:GetAll() 方法返回数据库中的所有预订。

【问题讨论】:

    标签: c# date range intervals


    【解决方案1】:

    要检查一个间隔是否与另一个重叠,您需要将一个终点与另一个起点进行比较,反之亦然。

    var bookings = _bookingRepository.GetAll()
        .Where(oldBooking =>
            newBookingfrom < oldBooking.To &&
            newBookingTo > oldBooking.From );
    

    要获得重叠的结果,只需在整个条件上添加!(

    请注意,根据您是否涉及时间组件,您可能需要将条件更改为&gt;=

    【讨论】:

      【解决方案2】:

      我建议使用此查询,如果时间范围不重叠,它将返回 true,否则将返回 false

      var bookings = _bookingRepository.GetAll()
          .Where(oldBooking =>
              newBookingfrom > oldBooking.To ||
              newBookingTo < oldBooking.From );
      

      在这里,我假设您已经在检查 newBookingfrom 是否始终在 newBookingTo 之前,并且日期范围是数据库也是正确的范围。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-28
        • 1970-01-01
        • 1970-01-01
        • 2019-04-26
        相关资源
        最近更新 更多