Domanda

Io sono la creazione di un calendario in PHP e nella banca dati hanno una data, diciamo 6-10-10.

A volte ho eventi ricorrenti, memorizzati come settimanale ripetere, quindi, se la data è 6-10-10, e mi sto ripetendo un evento ogni due settimane da quel giorno (tra cui quel giorno) qual è il modo migliore per trovare le date per ogni due settimane dal 6-10-10?

Per esempio, diciamo che la data è 7-8-10, come posso controllare per vedere quella data soddisfa i miei criteri?

È stato utile?

Soluzione

Che succede con il loop ?! Discrete Math 101: Come si fa a capire se un numero è pari? n%2==0

Come si fa a capire se una data è (uh ...) bisettimanale? date%2weeks==0

Toss in un offset e si ottiene (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
}

Altri suggerimenti

È possibile utilizzare DATEDIFF funzione.

Ad esempio

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

Se questo è per un calendario, come circa la costruzione di una catena di date valide che utilizzano 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>";

output sarà:

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

non dovrebbero risultato della DATEDIFF funzione in MySQL essere un multiplo di 7 (per eventi che si ripetono ogni settimana) o 14 (per eventi che si ripetono ogni due settimane), ecc?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top