PHP中的日历日视图

时间:2010-03-12 22:26:09

标签: php algorithm calendar

我正在为现有的日历解决方案添加日视图选项。像许多人实施自己的日历一样,我正在尝试为Google日历建模。他们拥有出色的日历解决方案,他们的日视图提供了很大的灵活性。在大多数情况下,实施进展顺利;但是,当涉及到相互冲突的事件时,我遇到了问题。

基本上,我希望事件能够并排共享相同的空间。同时开始的事件应该首先具有最长的事件。在我正在使用的示例数据集中,我有四个事件:

  

答:10:3​​0-11:30

     

B:13:30-14:30

     

C:10:3​​0-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没有帮助。

我想我可能需要一种使用一些基本几何和矩阵的算法,但我不知道从哪里开始。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

这对您自己的自定义日历开发没有帮助,但是当您尝试实现类似界面的Google日历时,我强烈推荐jQuery fullcalendar plugin

它需要日历数据的提要,我目前正在将其连接到Outlook Exchange公共日历,然后以月/周/日视图显示。日视图可以提供实现原始请求的一个很好的示例。