我正在尝试创建一个包含重复活动的活动日历(例如每周或每月),但我无法绕过它。谁能给我一些指示?这样做的最佳方法是什么?任何帮助是极大的赞赏。感谢。
答案 0 :(得分:2)
使用如下结构创建三个表:
event
表
-id
-schedule_type
-schedule_id
-title
etc.
schedule
表
-id
-event_id
-datetime
schedule_recurring
表
-id
-event_id
-date
-time
在event
表中,schedule_type字段将为0或1,这将向应用程序指示存储调度信息的表,以及如何解释该信息。
非定期事件将存储在schedule
中,日期时间为:2011-09-06 00:00:00,定期事件将存储在schedule_recurring
中,日期为:'每个第一个星期一'和时间:09:30,12:20(如果该事件在每个月的第一个星期一发生两次)。
也许这会帮助你入门!
答案 1 :(得分:1)
我知道这是一个老帖子,但我也在想同样的事情。
我喜欢使用多个表来执行此操作的人员解决方案,但实际上它可以从一个表中完成。
使用以下数据创建一个表...
event_title event_text event_image and_other_fields_about_event recur_code (text) recur_mode (integer) start_date (date) end_date (date) recur_end_date (date)
recur_mode可以有三种状态 - 0 =没有复发 1 =结束日期重复 2 =持续没有结束日期(例如,如果你想添加像1月1日那样的新年)
如果日期再次出现,recur_code将存储NULL或代码。应该在那里使用的代码是PHP DateInterval代码(即P1Y为1年或P3M(3个月)或P7D(7天)等) - 如果你想缩小数据,你可以切断初始'P'并稍后加回,因为初始'P'总是P,它代表Period所以“Period 3 Months”“Period 7 Days”等等。
然后,当您从数据库中检索数据时 - 使用以下搜索检索所有数据
(end_date> = CURDATE())或((recur_mode = 1)AND(recur_end_date> = CURDATE()))OR(recur_mode = 2)
(请注意这不是正确的SQL - 它只是您需要的语句的基本示例)
然后一旦你检索了数据,就使用带有while循环和DateInterval的PHP来增加start_date,直到你到达下一次重复,同时确保如果recur_mode设置为1,则开始日期不在recur_end_date之后
所有在一个表中完成 - 如果你想要一个输入表单放入代码然后使用带有dateinterval值的隐藏字段,同时使用各种单选按钮来选择间隔 - 然后使用jQuery onchange更新隐藏使用新选择器值的值。