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

时间:2018-11-23 22:05:11

标签: c# linq fullcalendar

我正在实现服务器端代码以获取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. 如果是AllDay事件,则开始日期是否在视图内?

伪示例:

var rep = context.GetRepository<Event>();
events = rep.Get().Where(e => /* need help here */).AsQueryable();

1 个答案:

答案 0 :(得分:2)

我喜欢这个(重叠的日期)!通常,公式为:

var dateFrom = ;// start of week
var dateTo = ; // end of week

var events = rep.Get()
    .Where(e => e.Start <= dateTo && e.End >= dateFrom)
    .AsQueryable();

因为您需要范围内包含的东西,从范围开始并向外扩展,在范围之前开始并在范围内结束,并且在范围之前和之后开始。

但是,如果您需要处理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