在PHP / MySQL中创建定期日历事件

时间:2011-09-06 16:02:37

标签: php mysql calendar

我正在尝试创建一个包含重复活动的活动日历(例如每周或每月),但我无法绕过它。谁能给我一些指示?这样做的最佳方法是什么?任何帮助是极大的赞赏。感谢。

2 个答案:

答案 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更新隐藏使用新选择器值的值。