PHP Расчет даты следующего события

У меня есть база данных, содержащая события в следующем формате:

Расписания

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

show_id содержит идентификационный номер шоу, которое сохраняется.

Шоу можно сохранять несколько раз для разного повторения или разных дней/времени.

starttime, endtime и repeatuntil немного очевидны в том, что они делают.

Repeat - тип повтора:

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

nthdayofmonth не уверен на 100%, нужно ли это или будет ли он использоваться Repeatmultiple, когда события нужно повторять раз в две недели или раз в месяц и так далее...


С чем я боролся, так это с кодом, который вычисляет, когда происходит следующее событие, я пробовал различные решения из Интернета и stackoverflow, но все еще борюсь. В большинстве случаев мой код зацикливается и не может определить правильную дату следующего события.

Если кто-то может помочь с кодированием функции, которая может циклически находить следующий раз, когда происходит событие, я буду очень признателен за помощь, так как я очень расстроен и не намного дальше, чем когда я начал.


person Aran    schedule 13.06.2011    source источник
comment
Я не думаю, что вам действительно нужна петля для этого. Вы пытались создать объект даты с известным вхождением, а затем использовать date_add() для перехода к следующему?   -  person Rob Allen    schedule 13.06.2011
comment
@ Роб Аллен, но это сработает только в первый раз, когда событие повторяется?   -  person Aran    schedule 22.06.2011
comment
ты прав. Когда вы запустите это, вы получите самое следующее событие и только самое следующее событие. Но эта функция может стать краеугольным камнем любых других процессов, которые вам нужны. Рефакторинг может дать вам N-й экземпляр или N-е количество дат. В конце концов вы можете подключить его к циклу для создания календаря или другого набора дат событий.   -  person Rob Allen    schedule 23.06.2011


Ответы (1)


Я думаю, вы можете подойти к этому, охарактеризовав две функции, которые вам действительно нужны здесь.

Во-первых, вам нужен метод вычисления следующего DateTime, который будет выполнять данный Show. Это не зависит от любых других Show и не имеет ничего общего с тем, что будет первым. Вам нужен метод, который, учитывая критерии starttime, endtime, etc, будет вычислять следующий раз, когда этот Show будет выполняться.

Как только вы сможете определить, когда будет выполняться любой заданный Show, вы можете перейти к определению какого Show, который будет выполняться следующим. Вы можете прокручивать базу данных, вычисляя время Next и сохраняя самое раннее... или даже сериализовать Next DateTime для каждого Show и запрашивать базу данных для наименьшего.

person dolphy    schedule 13.06.2011
comment
К сожалению, это не помогло мне решить мою проблему, упомянутую в моем вопросе. - person Aran; 19.06.2011