这是一个很难解释的问题,但我会尽力而为。
我有一个活动日历。其中有非工作日。当事件的任何部分在非工作日登陆时,其天数将延长至工作日。看这里:
我有一个橙色的 1 天活动。
当它被拖到非工作日时,它会延伸:
这很好用而且很好用。这是问题所在。我一次只显示 2 周的日历。因此,首先,我获取开始、结束或落在该范围内的可见事件。然后,我获取该范围的非工作日并将非工作日动态添加到其长度中。
这是问题所在:
假设有一个从 1 月 28 日开始到 1 月 29 日结束的活动。这意味着它不会被获取。但由于非工作日,它会在 2 月 6 日结束,可以说。好吧,因为我没有在第一步中获取它,所以从 2 月 4 日到 15 日我不会看到它。这本质上是我的问题。
天真的解决方案是获取所有事件和所有非工作日,然后动态预先计算所有结束日期,然后过滤那里的可见日期。但这会很快变得非常昂贵。
但我想不出任何其他解决方案。它需要是动态的。有没有人对我如何以非 O(N^2) 方式解决这个问题有任何创造性的想法。只是一个解决方案的概要将非常有帮助。如果需要,我不介意修改数据库。
目前,时间表具有开始日期和小时数。我动态计算事件的长度,因为不同的员工工作时间不同,这就是我不能有静态结束日期的原因。