2011-06-13 4 views
0

j'ai une base de données qui organise des événements dans le format suivant:PHP Calcul date de l'événement suivant

Horaires

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

show_id détient le numéro d'identification pour le spectacle qui est stocké.

Les émissions peuvent être stockées plusieurs fois pour différentes variations récurrentes ou différentes variations de jour/heure. Startime, endtime et repeatuntil sont un peu flagrants quant à ce qu'ils font.

répétition est le type de répétition:

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

nthdayofmonth ne suis pas 100% si cela est nécessaire ou sera utilisé repeatmultiple doit être utilisé lorsque les événements sont recherchés à répéter toutes les deux semaines ou tous les deux mois ainsi de suite ...


ce que je me bats avec le code qui calcule quand le prochain événement se produit, j'ai essayé différentes solutions de l'internet et stackoverflow, mais je suis encore en difficulté. La majorité du temps mon code finit dans une boucle infinie et est incapable de trouver la bonne date pour l'événement suivant. Si quelqu'un est capable d'aider avec le codage d'une fonction qui peut passer en boucle pour trouver la prochaine fois qu'un événement se produit, j'apprécierai beaucoup les aides car je suis très frustré et pas très loin de quand j'ai commencé.

+0

Je ne pense pas que vous voulez vraiment une boucle pour cela. Avez-vous essayé de créer un objet date avec l'occurrence connue, puis d'utiliser date_add() pour passer au suivant? –

+0

@Rob Allen mais cela ne fonctionnerait que pour la première fois que l'événement est répété? – Aran

+0

vous avez raison. Lorsque vous exécutez cela, vous obtiendrez l'événement suivant et seulement l'événement suivant. Mais cette fonction peut être la pierre angulaire de tous les autres processus dont vous avez besoin. Un refactoring pourrait vous donner la Nième instance ou N nombre de dates. Finalement, vous pouvez le brancher dans une boucle pour construire un calendrier ou une autre collection de dates d'événements. –

Répondre

0

Je pense que vous pouvez aborder cela en caractérisant les deux fonctionnalités dont vous avez vraiment besoin ici. D'abord, vous avez besoin d'une méthode de calcul du DateTime suivant qu'un donnéShow sera exécuté. Ceci est indépendant de tout autre Show, et n'a rien à voir avec ce qui viendra en premier. Vous avez besoin d'une méthode qui, compte tenu des critères starttime, endtime, etc, sera calculée la prochaine fois que cette Show sera exécutée.

Une fois que vous êtes en mesure de déterminer quand une donnée Show exécutera, vous pouvez passer à la détermination quiShow exécutera suivant. Vous pouvez parcourir la base de données, calculer la prochaine fois et stocker le plus tôt ... ou même sérialiser le Next DateTime pour chaque Show, et interroger la base de données pour la plus petite.

+0

Malheureusement, cela ne m'a pas aidé à résoudre mon problème mentionné dans ma question. – Aran