2012-06-02 12 views
6

Ho un'app di pianificazione web che sto attualmente riscrivendo e ho alcune domande su come lavorare con appuntamenti ricorrenti (so che non mancano "cosa è il il modo migliore per farlo "quando si tratta di app ricorrenti).php - lavoro con date come "ogni altra settimana il martedì"

quindi voglio offrire appuntamenti in cui l'utente può pianificare un appuntamento per una data come sab 2 giugno ricorrenti, e dovrebbe ripetere ogni due settimane il Sabato per un certo periodo di tempo predeterminato (come 1 anno).

Quali funzioni di php possono aiutarmi a determinare in quale data "cade ogni altro sabato"? Allego un'immagine della mia interfaccia utente per chiarimenti.

enter image description here

+1

Stuff come 'strtotime ('Next Saturday')' è abbastanza facile, a meno che non vogliate cose più complicate :) –

+0

Così viene utilizzato in un calendario per l'utente, dove cercano attivamente le informazioni su quando il loro appuntamento è se hanno bisogno di un promemoria? O ha bisogno di inviare loro un messaggio automatico o qualcosa del genere da solo? –

+0

Ciao Max, la mia app consente agli utenti di pianificare appuntamenti e quindi invia promemoria ai loro clienti in merito al prossimo appuntamento. In questo caso, desidero ospitare un utente che prenota un appuntamento "a settimane alterne il sabato" (o qualsiasi altra combinazione che la mia interfaccia utente può creare). La mia preoccupazione era che aggiungere solo 14 giorni (in questo caso) non significava sempre che l'appuntamento sarebbe caduto di sabato. – Greg

risposta

14

Personalmente mi piacerebbe lavorare con gli oggetti DateTime e utilizzare la classe DateInterval.

Nel tuo caso sopra, è necessario lavorare fuori la data del primo/prossimo sabato, poi basta lavorare con un intervallo di date salone delle 2 ruote

esempio di base

$dow = 'saturday'; 
$step = 2; 
$unit = 'W'; 

$start = new DateTime('2012-06-02'); 
$end = clone $start; 

$start->modify($dow); // Move to first occurence 
$end->add(new DateInterval('P1Y')); // Move to 1 year from start 

$interval = new DateInterval("P{$step}{$unit}"); 
$period = new DatePeriod($start, $interval, $end); 

foreach ($period as $date) { 
    echo $date->format('D, d M Y'), PHP_EOL; 
} 

/* 
Sat, 02 Jun 2012 
Sat, 16 Jun 2012 
Sat, 30 Jun 2012 
Sat, 14 Jul 2012 
… 
Sat, 20 Apr 2013 
Sat, 04 May 2013 
Sat, 18 May 2013 
Sat, 01 Jun 2013 
*/ 
+0

Grazie per aver aggiunto l'esempio salathe –

+0

Penso che questo sia quello che sto cercando! Grazie Marco. Darò una prova al mattino, l'input è molto apprezzato! – Greg

+0

Ciao Mark, sembra che alcune delle tue classi siano disponibili solo in php 5.3.x (DatePeriod, DateInterval). Sfortunatamente ho provato ad aggiornare il mio server stamattina e mi ha dato un sacco di siti joomla che sto utilizzando, quindi ho dovuto tornare alla versione 5.2.9. Esiste un approccio simile alla tua soluzione che utilizza alcune funzionalità della funzionalità 5.2.9? – Greg

0

Beh, vorrei impostare una data di inizio prima; quando quel giorno è arrivato, basta:

$next_date = strtotime('+2 weeks'); 

Questo ti porta lo stesso giorno, ma solo due settimane più tardi. E il ciclo continua :)

0

è possibile utilizzare un colonna del database per memorizzare il tempo in secondi:

UPDATE appointments SET dtime=UNIX_TIMESTAMP() WHERE id=5 

allora, è possibile controllare questo valore ovunque uno specifico periodo è appena uscito/passato:

mysql_query("SELECT id FROM appointments WHERE dtime>='".(strtotime("-1 week"))."'); 

l'ID/i selezionato/i è di 1 settimana o più.

Problemi correlati