MySQL obtiene la fecha de hace n días como marca de tiempo


97

En MySQL, ¿cómo obtendría una marca de tiempo de, digamos, hace 30 días?

Algo como:

select now() - 30

El resultado debería devolver una marca de tiempo.


Creo que estás después del DATE_SUB .
joeslice

1
¿Qué formato de marca de tiempo? Existe el formato con el que las personas que trabajan con las funciones DATE de MySQL están familiarizadas, y hay una marca de tiempo de estilo UNIX.
joebert

Estoy tras la marca de tiempo de MySQL.
Ben Noland

Respuestas:


179

DATE_SUB hará parte de él dependiendo de lo que quieras

mysql> SELECT DATE_SUB(NOW(), INTERVAL 30 day);
2009-06-07 21:55:09

mysql> SELECT TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 day));
2009-06-07 21:55:09

mysql> SELECT UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 day));
1244433347

11
¿Cuál es la diferencia entre la primera y la segunda consulta?
Codler

5
aparece (v1) DATE_SUB devolverá un DATETIME o STRING dependiendo de las entradas. TIMESTAMP (v2) lo está forzando a un tipo TIMESTAMP. dev.mysql.com/doc/refman/5.1/en/…
jsh

3

Podrías usar:

SELECT unix_timestamp(now()) - unix_timestamp(maketime(_,_,_));

Para marcas de tiempo de Unix o:

SELECT addtime(now(),maketime(_,_,_));

Para el formato de fecha estándar de MySQL.


0

Si necesita horas negativas desde la marca de tiempo

mysql>SELECT now( ) , FROM_UNIXTIME( 1364814799 ) , HOUR( TIMEDIFF( now( ) , FROM_UNIXTIME( 1364814799 ) ) ) , TIMESTAMPDIFF( HOUR , now( ) , FROM_UNIXTIME( 1364814799 ) ) 
2013-06-19 22:44:15     2013-04-01 14:13:19     1904    -1904

esta

TIMESTAMPDIFF( HOUR , now( ) , FROM_UNIXTIME( 1364814799 ) ) 

devolverá valores negativos y positivos, si necesita usar x> this_timestamp

pero esto

HOUR( TIMEDIFF( now() , FROM_UNIXTIME( 1364814799 ) ) )

devolverá solo positivo, horas

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.