2010-07-30 20 views
8

tengo que enviar un correo electrónico cuando un usuario registra correo electrónico contiene un enlace que se convierte en inválido después de seis horas qué estoy haciendo cuando se envía el correo electrónico actualizo el db con el campo emailSentDate of tipo "datetime" ahora tengo la fecha y hora actualizadas y he hecho el mismo formato que en db ahora quiero encontrar que ambas fechas y tiempo tienen una diferencia de 6 horas o no para que pueda hacer el enlace inválido pero nose sabe cómo hacer estocómo restar dos fechas y horas para obtener la diferencia

mi código es el siguiente aspecto im usando valor codificado para db sólo por ejemplo

$current_date_time=date("Y-m-d h:i:s"); 
$current=explode(" ",$current_date_time); 
$current_date=$current[0]; 
$current_time=$current[1]; 
$db_date_time="2010-07-30 13:11:50"; 
$db=explode(" ",$db_date_time); 
$db_date=$db[0]; 
$db_time=$db[1]; 

no sé cómo proceder PLZ ayudar

+0

Consulte http://stackoverflow.com/search?q=subtract+dates+php – Gordon

Respuesta

1

Prefiero trabajar con una marca de tiempo: Guardar el valor que se devuelve por "tiempo() "como" savedTime "a su base de datos (eso es una marca de tiempo en segundos). Reste ese número de "tiempo()" cuando revisa sus seis horas.

if ((time() - savedTime) > 6 * 3600) // more than 6h ago

o

"SELECT FROM table WHERE savedTime < " . (time() - 6 * 3600)

+0

no estoy seguro de que responda la pregunta, pero es la respuesta que estaba buscando –

18
<?php 
//$now = new DateTime(); // current date/time 
$now = new DateTime("2010-07-28 01:11:50"); 
$ref = new DateTime("2010-07-30 05:56:40"); 
$diff = $now->diff($ref); 
printf('%d days, %d hours, %d minutes', $diff->d, $diff->h, $diff->i); 

impresiones 2 days, 4 hours, 44 minutes

ver http://docs.php.net/datetime.diff

edición: pero también se puede desplazar el problema más a la lado de la base de datos, p. al almacenar la fecha/hora de caducidad en la tabla y luego hacer una consulta como
... WHERE key='7gedufgweufg' AND expires<Now()
Muchos rdbms tienen un soporte razonable/bueno para la aritmética de fecha/hora.

+0

Hmm, eso no parece funcionar con todas las versiones de PHP. No tengo el método 'diff()' ... –

+0

Correcto. El manual dice '(PHP 5> = 5.3.0)' que fue lanzado en junio de 2009 ;-) – VolkerK

+0

Lo sé, loco: -/Debería cambiar mi proveedor de alojamiento, supongo ... Tengo 5.2.x –

3

Lo que puede hacer es convertir ambas fechas en Unix epoch times, es decir, el número equivalente de segundos desde la medianoche del 31 de diciembre de 1969. Desde allí puede deducir fácilmente la cantidad de tiempo transcurrido entre las dos fechas. Para hacer esto, puede usar mktime() o strtotime()

Todo lo mejor.

2

$ hoursDiff = (time() - strtotime ("2010-07-30 13:11:50"))/(60 * 60);

+0

r restar la fecha actual de la fecha de guardado y el resultado será en horas, ¿verdad? – user403269

+0

hey está creando un problema para el mismo día supongamos que tengo que encontrar la diferencia del mismo día que da como resultado un valor negativo – user403269

Cuestiones relacionadas