MySQL obtient la date d'il y a n jours comme horodatage

97

Dans MySQL, comment puis-je obtenir un horodatage d'il y a 30 jours par exemple?

Quelque chose comme:

select now() - 30

Le résultat doit renvoyer un horodatage.

Ben Noland
la source
Je pense que vous êtes après le DATE_SUB .
joeslice
1
Quel format d'horodatage? Il y a le format que les gens qui travaillent avec les fonctions MySQL DATE sont familiers, et il y a un horodatage de style UNIX.
joebert
Je suis après l'horodatage MySQL.
Ben Noland

Réponses:

179

DATE_SUB en fera une partie en fonction de ce que vous voulez

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
la source
11
Quelle est la différence avec la première et la deuxième requête?
Codler
5
il semble que (v1) DATE_SUB renverra un DATETIME ou STRING selon les entrées. TIMESTAMP (v2) le force à un type TIMESTAMP. dev.mysql.com/doc/refman/5.1/en/…
jsh
3

Vous pouvez utiliser:

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

Pour les horodatages unix ou:

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

Pour le format de date standard MySQL.


la source
0

Si vous avez besoin d'heures négatives à partir de l'horodatage

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

ce

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

renverra des valeurs négatives et positives, si vous devez utiliser x> this_timestamp

mais ça

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

retournera seulement positif, heures

Petre Sosa
la source