O MySQL obtém a data n dias atrás como um carimbo de data / hora

97

No MySQL, como obter um carimbo de data / hora, digamos, 30 dias atrás?

Algo como:

select now() - 30

O resultado deve retornar um carimbo de data / hora.

Ben Noland
fonte
Acho que você está depois de DATE_SUB .
joeslice
1
Qual formato de carimbo de data / hora? Há o formato com o qual as pessoas que trabalham com funções DATE do MySQL estão familiarizadas e há um carimbo de data / hora no estilo UNIX.
joebert
Estou atrás do carimbo de data / hora do MySQL.
Ben Noland

Respostas:

179

DATE_SUB fará parte dependendo do que você quiser

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
Justin giboney
fonte
11
Qual é a diferença com a primeira e a segunda consulta?
Codler
5
parece que (v1) DATE_SUB retornará DATETIME ou STRING dependendo das entradas. TIMESTAMP (v2) está forçando para um tipo TIMESTAMP. dev.mysql.com/doc/refman/5.1/en/…
jsh
3

Você pode usar:

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

Para carimbos de data / hora unix ou:

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

Para o formato de data padrão do MySQL.


fonte
0

Se você precisar de horas negativas do carimbo de data / hora

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

isto

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

retornará valores negativos e positivos, se você precisar usar x> this_timestamp

mas isso

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

retornará apenas positivo, horas

Petre Sosa
fonte