2012-02-27 25 views
6

Tengo un problema aquí ..php - Una hora antes que la fecha especificada

Supongo que tengo este tipo de fecha y hora.

 

$date = strtotime($date); 
 

Necesito esto para ser convertidos al formato de marca de tiempo Unix una sola hora earlier..I trataron

 

$date = strtotime($date-86400) 
 

, pero me pareció que es un error. Volvió a 0 cuando me colé en la mesa.

¿Cuál es la forma adecuada de lograr esto?

Gracias.

+0

Hay 3.600 segundos en una hora y 86.400 segundos en un día. Tienes que restar 3600 segundos. 'strtotime ($ date) - 3600;' – Cheery

Respuesta

4

strtotime le dará la marca de tiempo de unix de su fecha. A partir de esta fecha y hora, a continuación, reste su hora:

$date = strtotime($date) - 3600; // 3600 = 60 * 60 

Si llama strtotime($date - 3600), es como obtener la hora de -3600 (por ejemplo strtotime(-3600)) que no tiene sentido, porque strtotime espera una cadena como primer argumento.

+2

Hay 3600 segundos en una hora y 86400 segundos en un día. – Cheery

+0

Ah sí ... Estaba totalmente en un lío ... No debería contar 60 * 60 * 24 ... eso me da segundos en un día ... estúpida :( – foxns7

5

que podría hacer:

 

$testDateStr = strtotime($date); 
$finalDate = date("Y-m-d H:i:s", strtotime("-1 hour", $testDateStr)); 
 

creo que sirve

+0

Si bien esta respuesta es bastante auto- explicativo para aquellos que están familiarizados con 'date()' y 'strtotime()', mejoraría su respuesta con alguna explicación. – mickmackusa

3

86.400 segundos es de un día, ni una hora.

La salida de strtotime() es una marca de tiempo unix. 3600 segundos antes es esa marca de tiempo menos una hora. Por lo tanto:

$date = strtotime($somestring); 

$hourago = $date - 3600; 

O, dependiendo del formato original de $ somestring:

$hourago = strtotime($somestring . " - 1 hour"); 

Y no se olvide de date_default_timezone_set()

1

Intentar esta consulta

$query= "insert into yourTable(otherValues, date) 
values (otherFields, DATE_ADD(NOW(),INTERVAL -1 hour)) 

Uso DATE_ADD para insertar un valor de fecha que es 1 hora menos que la hora actual.

+0

Downvoted porque OP no solicita una solución 'mysql' ni' INSERT'. Todas las respuestas también debe incluir algún tipo de explicación para que los lectores puedan comprender completamente/beneficiarse de la respuesta/enfoque. – mickmackusa

0

Nadie ofreció una solución de objeto DateTime todavía, así que lo haré. Es el método más moderno para manejar la fecha y hora y no requiere ningún cálculo de minutos & segundos.

Siempre me gusta caer en algún tipo de declaración de zona horaria para hacer las cosas definitivas. El horario de verano es normalmente una preocupación con las manipulaciones de fecha y hora, pero probablemente esté bien en este caso. Siéntase libre de modificar la zona horaria de su caso.

PHP enlaces manuales:

Código (incluyendo TI formateado Me para la comparación) Demo Link:

$now=new DateTime('NOW UTC'); 

$now_stamp=$now->getTimestamp(); 
$formatted_now=$now->format("Y-m-d H:i:s"); 
echo "$now_stamp ($formatted_now)\n"; 

$hour_ago=$now->modify('-1 hour'); 
$hour_ago_stamp=$hour_ago->getTimestamp(); 
$formatted_hour_ago=$hour_ago->format("Y-m-d H:i:s"); 
echo "$hour_ago_stamp ($formatted_hour_ago)"; 

Salida:

1492687193 (2017-04-20 11:19:53) 
1492683593 (2017-04-20 10:19:53) 
Cuestiones relacionadas