Pregunta

guión:

hay 4 artículos:

30day pass
60day pass
180day pass
365day pass

hay un límite de crédito mensual (30 días).por lo tanto, si utiliza el crédito antes de fin de mes, deberá comprar otro pase de 30 días o esperar hasta el próximo período de renovación.

Una persona compra un pase de 30 días hoy, la fecha de compra se registra en la base de datos.También se registra la fecha de caducidad.

if ($todaysdate >= $expirydate) //DONE. 

¿Pero qué pasa con los pases de 60 y 180 días?

Hemos comprado fecha y fecha de vencimiento.Cada 30 días, el crédito debe restablecerse para el mes siguiente.

Realmente no sé cómo abordar mejor este problema.

¿Fue útil?

Solución

Se puede ejecutar una tarea (o tarea cron) al día para comprobar y ver si la fecha actual es posterior a la fecha de vencimiento anotada, y si se restablece el crédito a los usuarios a 0, y les envía un correo electrónico haciéndoles saber su crédito ha caducado.

A medida que los usuarios a través de reserva de crédito, usted simplemente agrega 30, 60 o 90 días de su fecha de caducidad.

Para obtener más información, consulte php + cronjob etiquetas.

Otros consejos

una forma de hacerlo es con cron y mysql

cuando ejecutas este cron todos los días

definir una variable

define (DAY_AMOUNT ,30);

consultar el pase del día por consulta

SELECT mem_id  DATEDIFF(CURDATE(),mem_date) AS daypass FROM table
 WHERE ((DATEDIFF(CURDATE(),mem_date))=".DAY_AMOUNT."

los resultados que regresan son todos los miembros que pasan 30 días desde la fecha.

en su situación, usted podría tener una tabla como la siguiente:

pass: (id, user_id, start_time, end_time, credit)

todos los días se puede vaciar el crédito no utilizado en cualquier pase que ha caducado:

update user join
  (select user_id, sum(credit) as credit from pass
    group by user_id where end_time <= now() and not flushed) b
  set user.credit = max(user.credit - b.credit, 0)
  where user.user_id = b.user_id

update pass set flushed = 1 where end_time <= now() and not flushed

utilizando hora_final <= NOW () se asegura el crédito sólo se restablece una vez que la fecha de caducidad ha pasado. ya que recuerda qué pasadas estaban rojas, puede ejecutar esto tantas veces como desee y falta de un día no es un problema (que se detecta en la próxima ejecución).

Esto es efectivamente cómo una tarjeta prepagada funcionaría -. Tiene un cierto número de minutos que son válidos para X (30/60/90 lo que sea) días y los minutos se restablecen al final

por cierto, puede simplificar todo eso mediante el uso de una herramienta fácil de usar de gestión de suscripciones como recurly o < a href = "http://www.chargify.com" rel = "nofollow noreferrer"> Chargify .

O, en la base de datos, puede guardar cada persona tiene su propia fecha de caducidad.

Para hacer una fecha de caducidad, se debe utilizar una marca de tiempo Unix. 30 días es tan 2592000 para encontrar la fecha de caducidad, se podría usar algo como lo siguiente si desea calcular la fecha de caducidad (Cambio meses con el número de meses).

  

$months = 2;   $expiry_date = time() + 2529000*$months;

A continuación, poner esos valores en una base de datos.

A continuación, se puede hacer algo que hace una tarea automatizada (por ejemplo, cron).

Al ejecutar esta tarea automatizada, se comprueba si la fecha y hora actual (otra palabra para el tiempo) es más grande que la fecha de caducidad. Si es así, a continuación, cambiar el valor en la base de datos en el campo por si tienen los créditos adecuados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top