2010-06-10 5 views
1

Je crée un calendrier en PHP et dans la base de données j'ai une date, disons 6-10-10.Vérifier les dates de répétition

Parfois, j'ai des événements répétitifs, stockés comme répétition hebdomadaire, donc si la date est 6-10-10, et je répète un événement toutes les deux semaines de ce jour (y compris ce jour) quelle est la meilleure façon de trouver dates pour toutes les deux semaines du 6-10-10? Par exemple, disons que la date est 7-8-10, comment puis-je vérifier si cette date correspond à mes critères?

Répondre

3

Qu'est-ce qui se passe avec le bouclage?! Mathématiques discrètes 101: Comment déterminez-vous si un nombre est pair? n%2==0

Comment déterminez-vous si une date est (euh ...) toutes les deux semaines? date%2weeks==0

Toss dans un décalage et vous obtenez (date-startdate)%2weeks

$startdate = strtotime("10 June 2010"); 
$otherdate = strtotime("8 July 2010"); 
$twoweeks = strtotime("+2 weeks") - time(); 
if($otherdate>$startdate && (($otherdate-$startdate)%$twoweeks)==0) { 
    // this is n * two weeks after 
} 
+0

+1, c'est la meilleure solution et la plus courte –

+0

@Pekka - merci de ne pas prendre ma boucle personnellement jab :) –

+0

pas de problème, vous avez tout à fait raison :) Cela dépend de l'utilisation - si vous avez besoin de générer des dates à mettre en un calendrier, vous devez construire une chaîne. Mais ce n'était pas ce que le PO demandait. –

1

Si c'est pour un calendrier, que diriez-vous de construire une chaîne de dates valides en utilisant strtotime?

// 10 dates every two weeks starting next thurdsay 

$valid_dates = array(); 
$date_counter = 0; 
$date_counter = strtotime("next thursday"); // I love being a lazy bastard! 

while ($i < 10) 
{ 
    array_push($valid_dates, $date_counter); 
    $date_counter = strtotime("+2 weeks", $date_counter); 
    $i++; 

} 

foreach ($valid_dates as $date) 
echo date("Y/m/d", $date)."<br>"; 

Affichera:

2010/06/17 
2010/07/01 
2010/07/15 
2010/07/29 
2010/08/12 
2010/08/26 
2010/09/09 
2010/09/23 
2010/10/07 
2010/10/21 
+0

Cela suppose que les dates valides se terminent à un moment donné. Que se passe-t-il si mes dates valides vont indéfiniment dans le futur (comme l'établissement d'une répétition toutes les 2 semaines pour toujours). – kylex

+0

@kylex oui, c'est une approche avec un nombre donné de dates. L'approche DATEDIFF semble plus facile pour cette tâche spécifique, si c'est tout ce que vous devez faire avec cela. Vous pourriez avoir besoin de quelque chose comme 'strftime' mais si cela devient plus complexe comme" tous les 3èmes du mois ". –

1

Vous pouvez utiliser la fonction DATEDIFF.

Par exemple

SELECT * FROM myTable WHERE (DATEDIFF(myDate, '2007-12-30') % 14) = 0 
0

ne devrait pas entraîner de la fonction DATEDIFF MySQL soit un multiple de 7 (pour les événements récurrents chaque semaine) ou 14 (pour les événements répéter toutes les deux semaines), etc.?

Questions connexes