2012-06-02 16 views
6

Tengo una aplicación de programación web que actualmente estoy reescribiendo y tengo algunas preguntas sobre cómo trabajar con citas recurrentes (sé que no hay escasez de "¿cuál es el La mejor forma de hacerlo es "cuando se trata de aplicaciones recurrentes".php - trabajando con fechas como "cada dos semanas el martes"

por lo que quiero ofrecer citas donde el usuario puede programar una cita para una fecha como sábado 2 de junio recurrentes, y se debe repetir cada dos semanas el sábado durante un período de tiempo predeterminado (como 1 año).

¿Qué funciones de php pueden ayudarme a determinar en qué fecha cae "cada otro sábado"? Adjunto una imagen de mi IU para aclararme.

enter image description here

+1

Cosas como 'strtotime ('El próximo sábado')' es bastante fácil, a menos que desee cosas más complicadas :) –

+0

Por lo tanto, se está utilizando en un calendario para el usuario, donde buscan activamente la información sobre cuándo su cita es si necesitan un recordatorio? ¿O es necesario que les envíe un mensaje automático o algo así por su cuenta? –

+0

Hola, mi aplicación permite a los usuarios programar citas y luego les envía recordatorios a sus clientes de la próxima cita. En este caso, quiero acomodar a un usuario que reserva una cita "cada dos semanas el sábado" (o cualquier otra combinación que mi interfaz de usuario pueda crear). Mi preocupación era que solo agregar 14 días (en este caso) no siempre significaría que la cita sería un sábado. – Greg

Respuesta

14

Personalmente, me gustaría trabajar con objetos DateTime y utilizar la clase DateInterval.

En el caso anterior, es necesario calcular la fecha de la primera/el próximo sábado, a continuación, sólo funciona con un intervalo de fechas P2W

Ejemplo básico

$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

Gracias por agregar el ejemplo salathe –

+0

¡Creo que esto es lo que estoy buscando! Gracias Mark. Lo intentaré por la mañana, ¡la contribución es muy apreciada! – Greg

+0

Hola, parece que algunas de las clases que usas solo están disponibles en php 5.3.x (DatePeriod, DateInterval). Desafortunadamente, intenté actualizar mi servidor esta mañana y se corrompió un montón de sitios joomla que estoy ejecutando, así que tuve que volver a 5.2.9. ¿Existe un enfoque similar para su solución que utiliza algún sabor de la funcionalidad 5.2.9? – Greg

0

Bueno, me gustaría establecer una fecha de inicio en primer lugar; cuando ese día ha llegado, simplemente hazlo:

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

Esto te lleva el mismo día, pero solo dos semanas después. Y el ciclo continúa :)

0

puede utilizar una columna de base de datos para almacenar su tiempo en segundos:

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

a continuación, se puede comprobar este valor siempre que sea un período específico acaba de llegar/pasó:

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

id (s) seleccionado (s) son de 1 semana o más.

Cuestiones relacionadas