代码之家  ›  专栏  ›  技术社区  ›  user1447679

检查日期范围是否在fullcalendar.io显示的另一个日期范围内

  •  2
  • user1447679  · 技术社区  · 6 年前

    我正在实现服务器端代码以获取 fullcalendar.io .

    有两种情况:

    1. 事件有开始和结束日期
    2. 事件有一个开始日期,设置为全天

    模型:

    public Class CalendarEvent {
      public DateTimeOffset Start { get; set; }
      public DateTimeOffset? End { get; set; }
      public bool AllDay { get; set; }
    }
    

    什么时候? https://fullcalendar.io 加载一个视图,它会发出一个日期范围,基本上是日历上可以看到的日期(即10/8/18到12/8/18),我将它发送给我的控制器以获取该范围的相关事件。

    我基本上需要检查以下内容:

    1. 事件日期范围的任何部分是否在日历发出的可见范围内-如果是,请显示它。
    2. 如果是全天事件,开始日期是否在视图中?

    伪例子:

    var rep = context.GetRepository<Event>();
    events = rep.Get().Where(e => /* need help here */).AsQueryable();
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Jonathan    6 年前

    我喜欢这个(日期重叠)!一般来说,公式为:

    var datefrom=;//周开始
    var dateto=;//周末
    
    var事件=rep.get()。
    。其中(e=>e.start<=dateto&e.end>=datefrom)
    .asqueryable();
    < /代码> 
    
    

    因为您需要范围包含的东西,从范围开始延伸,从范围之前到范围结束,从范围之前到结束。

    但是,如果您需要处理一个可为空的nullable-.end->code>然后可能更像:

    var datefrom=;//周开始
    var dateto=;//周末
    
    var事件=rep.get()。
    。在哪里(e=>e.start<=dateto&&e.end??e.start)>=日期从)
    asQueRabable();
    < /代码> 
    
    

    (非常)帮助可视化的基本模型:

    因为你需要范围包含的东西,从范围开始向外延伸,从范围开始到范围结束,从范围开始到范围结束。

    但如果你需要处理nullable.End然后可能更像:

    var dateFrom = ;// start of week
    var dateTo = ; // end of week
    
    var events = rep.Get()
        .Where(e => e.Start <= dateTo && (e.End ?? e.Start) >= dateFrom)
        .AsQueryable();
    

    (非常)帮助可视化的基本模型:

    Rudimentary mockup