【发布时间】:2011-07-25 13:09:57
【问题描述】:
您好,我一直在阅读大量反复出现的主题,但对于如何在我的日历应用程序中实现此逻辑的想法仍然为零。我有这张桌子:
id | title | start | end | recurring
1 | test1 | 2011-07-25 08:30:00 | 2011-07-25 10:30:00 | day
2 | test2 | 2011-07-26 08:30:00 | 2011-07-26 10:30:00 | week
3 | test3 | 2011-07-26 08:30:00 | 2011-07-26 10:30:00 | month
4 | test4 | 2011-07-26 08:30:00 | 2011-07-26 10:30:00 | year
当用户查看日历时,我将参数发送到 url 以从数据库中获取数据。例如:
月视图: http://www.domain.com?start=2011-07-01&end=2011-07-31
周视图: http://www.domain.com?start=2011-07-25&end=2011-07-29
到目前为止,我所拥有的是:
SELECT * CASE recurring WHEN "day" THEN IF(DATE_FORMAT(CURDATE(),"%j") = DATE_FORMAT(e.start,"%j"),1,0) WHEN "week" THEN IF(DATE_FORMAT(CURDATE(),"%w") = DATE_FORMAT(e.start,"%w"),1,0) END FROM event;
它只能检索一次...但是如果我查看下周 2011-08-01 到 2011-08-05 的日历,它将无法正常工作。
我的问题是,如何根据 url 参数检索重复事件?非常感谢任何帮助和建议。
PS:我确实偶然发现了这个线程:PHP 5.3 DateTime for recurring events,它似乎接近我所需要的,但在我的情况下,我无法弄清楚如何使用我的开始和结束日期时间动态地实现它。
【问题讨论】:
-
向我们展示您当前用于从数据库中获取数据的任何代码可能是个好主意。
-
结束日期是什么意思?在那之后,重复日期不再重复?您如何知道重复事件何时不再重复?我认为您当前的设计不能适当地处理事件的重复发生。
-
我会编辑您的问题以包含该代码,以便其他人立即看到。
-
@cularis:结束日期只是结束日期。事件可以在每天、每周或每月的下午 1 点至下午 3 点发生。没有字段指示循环何时结束。如果用户查看 3100 年的日历,它仍然会显示该事件。我相信这对于所有日历重复逻辑来说都是正常的。
-
对不起,汤姆,刚刚更新了我的第一篇文章。