我不知道我的逻辑是否正确,但我试图从头开始实现日历日视图。并且为了在同一时间实现同一空间的共享,对我来说它有点棘手。日历日视图逻辑
我有时间的列表:
A.凌晨1点 - 凌晨2点
B.凌晨1点 - 凌晨2:30
C.上午01时30 - 上午03点
所以基本上AC都有一个共同的凌晨2点的时间,所以他们需要分享在同一个空间。那么怎么能做到这一点呢?
我不知道我的逻辑是否正确,但我试图从头开始实现日历日视图。并且为了在同一时间实现同一空间的共享,对我来说它有点棘手。日历日视图逻辑
我有时间的列表:
A.凌晨1点 - 凌晨2点
B.凌晨1点 - 凌晨2:30
C.上午01时30 - 上午03点
所以基本上AC都有一个共同的凌晨2点的时间,所以他们需要分享在同一个空间。那么怎么能做到这一点呢?
这并不难。你应该计算重叠的任务,分配给列并绘制它。在你的例子中,我们有3个重叠的任务。这意味着你必须为代表每个任务的框创建3列。
A.凌晨1点 - 凌晨2点
B.凌晨1点 - 凌晨2:30
C.上午4时半 - 凌晨3点
这个例子创建2列,因为我们只有2个重叠的任务。
现在,当循环计数重叠的任务时,您可以将每个任务分配给指定的列。当需要新列时 - 创建它。
下一个循环仅在分配的列中绘制此框。正如你所看到的,我们必须循环:一个用于计数重叠和分配列,另一个用于绘图。
继承人什么,我已经得到了搜索TRU净
要检查重叠:
让康达平均日期范围完全后DATERANGE B(真,如果启动市场> EndB) 让CondB平均日期范围完全之前(如果恩达< STARTB真)
然后重叠存在DATERANGE乙如果A和B都不是真的(如果一个范围是其他后既不是完全,也不是完全在另一个之前,那么他们必须重叠)
现在德摩根定律,我认为这是说,
不是(A或B)< =>不是一个与非B
这意味着(启动市场< = EndB)和(恩达> = STARTB)
注意:这包括边缘完全重叠的情况。如果你想排除,改变> =运营商>,并< =到<
所以,在重叠值的基础上,我可以决定我应该有多少列添加。
因此,我应该比较什么能够检查时间是否重叠? – 2011-03-07 08:13:30
日期和时间就足够了:) – dariol 2011-03-07 10:01:16