【问题标题】:Check if date range is within another date range for fullcalendar.io display检查日期范围是否在 fullcalendar.io 显示的另一个日期范围内
【发布时间】:2019-04-26 11:04:11
【问题描述】:

我正在实现服务器端代码以获取 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();

【问题讨论】:

  • 我会将AllDay 更改为只读,并将get 方法更改为return End == null。它有点简化了它,您不需要在每次创建时都分配它。假设你可以控制它
  • @sertsedat 好电话

标签: c# linq fullcalendar


【解决方案1】:

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

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();

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

【讨论】:

  • 您可以将 null 大小写(以及所有情况)简化为 .Where(e =&gt; e.Start &lt;= dateTo &amp;&amp; (e.End ?? e.Start) &gt;= dateFrom)
  • 绘图道具:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-28
  • 1970-01-01
  • 2019-12-27
  • 1970-01-01
相关资源
最近更新 更多