我正在为现有的日历解决方案添加日视图选项。像许多人实施自己的日历一样,我正在尝试为Google日历建模。他们拥有出色的日历解决方案,他们的日视图提供了很大的灵活性。在大多数情况下,实施进展顺利;但是,当涉及到相互冲突的事件时,我遇到了问题。
基本上,我希望事件能够并排共享相同的空间。同时开始的事件应该首先具有最长的事件。在我正在使用的示例数据集中,我有四个事件:
答:10:30-11:30
B:13:30-14:30
C:10:30-11:00
D:10:45-14:00
我可以处理A,C和D就好了,问题来自D. A应该留在C,应该留在D;每个占宽度的三分之一(它的固定宽度,所以我可以做简单的数学来计算出来)。问题是B应该在A和C之下,在D的左边。理想情况下,B将占用与A和C相同的空间(三分之二宽度),但我甚至会满足于它只占用三分之一宽度。
我的事件数组类似于以下内容:
$events = array(
'1030' => array(
'uniqueID1' => array(
'start_time' => '1030',
'end_time' => '1130',
),
'uniqueID2' => array(
'start_time' => '1030',
'end_time' => '1100',
),
),
'1045' => array(
'uniqueID3' => array(
'start_time' => '1045',
'end_time' => '1400',
),
),
'1330' => array(
'uniqueID3' => array(
'start_time' => '1330',
'end_time' => '1430',
),
),
);
我的计划是为每个事件添加一些索引,包括它与之冲突的事件数量(因此我可以计算宽度)以及它应该在该系列中的哪个位置(因此我可以计算左值)。但是,这对B没有帮助。
我想我可能需要一种使用一些基本几何和矩阵的算法,但我不知道从哪里开始。
非常感谢任何帮助。
答案 0 :(得分:2)
这对您自己的自定义日历开发没有帮助,但是当您尝试实现类似界面的Google日历时,我强烈推荐jQuery fullcalendar plugin。
它需要日历数据的提要,我目前正在将其连接到Outlook Exchange公共日历,然后以月/周/日视图显示。日视图可以提供实现原始请求的一个很好的示例。