J'ai une application de calendrier qui utilise les nouvelles classes PHP DateTime. J'ai une façon que je gérer les événements récurrents, mais il semble pirater-ish et je voulais voir si les gars vous avez de meilleures idées:PHP 5.3 DateTime pour les événements récurrents
- J'ai un événement récurrent qui commence 11/16/2009 (16 nov, 2009)
- Il se produira tous les 3 jours
- l'événement se reproduira indéfiniment
Disons que l'utilisateur regarde le calendrier pour décembre, 3100 - cet événement doit montrer qu'il répéter tous les 3 jours comme normal. La question est - comment puis-je calculer ces jours dans ce mois?
=========================================
Voici comment je fais essentiellement, mais je sais que je me manque quelque chose plus facile:
- je calcule la différence de jours entre le début du mois d'être regardé (1 déc 3100) et le début de l'événement date (16 nov 2009) stocké comme $ daysDiff
- Je soustrais le module, de sorte que j'obtiens un facteur de 3 jours depuis le début comme ceci: $ daysDiff - ($ daysDiff% 3)
- Pour le bien de l'argument laisse dire que me donne 29, 3100 comme une date.
- Je puis ajouter 3 jours à cette date à plusieurs reprises jusqu'à ce que j'avoir toutes les dates au sein de décembre 3100
Mon principal problème est à l'étape 1. Le PHP DateInterval :: date_diff fonction ne calcule pas les différences de jours. Cela me donnera des années, des mois et des jours. Je dois ensuite truquer les chiffres pour obtenir une date approximative vers le 31 décembre. 11/16/2009 + (1090 ans * 365,25 jours) + (9 mois * 30,5 jours) + 15 jours
Quand vous allez REAL loin dans l'avenir comme l'année 9999, cette estimation peut être décalée d'un mois, alors je dois soustraire beaucoup d'intervalles de 3 jours pour obtenir où j'ai besoin.
... Bien sûr, la chose timestamp unix ne fonctionnera pas pour l'année 3100 sauf si vous utilisez 64 bits. – keithjgrant
Salut Keith - J'aime la façon dont vous pensez avec cela, mais c'est malheureusement une limitation pour moi aussi (sur 32 bits). Il semble que tout se passe comme prévu: "math" avec ces dates ne peuvent pas être faites, regardez mon "fudging" façon de le faire ci-dessus – John
Si vous placez un '@' devant l'horodatage comme suit: new DateTime ('@' .$ timestamp); whoa, ne s'est pas rendu compte que c'était la dernière fois active en 09 .... désolé. – Adam