2011-06-13 78 views
0

我有持有以下格式事件数据库:PHP计算下一个事件日期

时刻表

id 
show_id 
starttime - datetime 
endtime - datetime 
repeatuntil - datetime 
repeat - int 
nthdayofmonth - int 
repeatmultiple - int 

show_id持有人已存储节目的ID号。

对于不同的周期性或不同的天/时变化,节目可以存储多次。

startime,endtime和repeatuntil对于他们的工作有点显而易见。

重复是重复的类型:

1 - hourly 
2 - daily 
3 - weekly 
4 - monthly 
5 - yearly 

nthdayofmonth我不是100%,这是否需要将用于 repeatmultiple是当想要的事件每隔一周或每被重复使用一个月等等...


我一直在挣扎是计算当一个事件发生,我试图从互联网和计算器的各种解决方案,但我仍然在努力的代码。大部分时间我的代码在无限循环中结束,无法为下一个事件找出正确的日期。

如果有人能够帮助编写一个可以循环查找下一次事件发生的函数的编码,我将非常感谢那里的帮助,因为我感到非常沮丧,而且从开始时起就没有太多进展。

+0

我不认为你真的想为此循环。你有没有试过用已知的事件创建一个日期对象,然后使用date_add()去下一个? – 2011-06-13 19:40:21

+0

@Rob艾伦,但这只会在事件第一次重复时才起作用? – Aran 2011-06-21 20:15:13

+0

你是对的。当你运行它时,你将会得到下一个事件,并且只有下一个事件。但是,该功能可以成为您需要的其他任何流程的基石。重构可以给你第N个实例或N个日期。最终,您可以将其插入到循环中以构建日历或其他事件日期集合。 – 2011-06-23 12:03:50

回答

0

我认为你可以通过描述你真正需要的两个功能来解决这个问题。

首先,您需要一种计算下一个DateTime的方法,即给定Show将执行。这与任何其他Show无关,并且与先来的东西无关。您需要一种方法,根据starttime, endtime, etc标准,将在下次计算此Show将执行。

一旦你能够确定何时任何给定Show将执行,你可以继续确定Show下一次执行。您可以循环访问数据库,计算下一次并存储最快的...或者甚至序列化每个Show的下一个日期时间,并查询最小的数据库。

+0

不幸的是,这并没有帮助我解决我的问题中提到的问题。 – Aran 2011-06-18 21:45:58