MySQL получает дату n дней назад как отметку времени


в MySQL, как бы я получил метку времени, скажем, 30 дней назад?

что-то типа:

select now() - 30

результат возвращает метку времени.

3 78

3 ответа:

DATE_SUB будет делать часть этого в зависимости от того, что вы хотите

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

вы могли бы использовать:

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

для временных меток unix или:

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

для стандартного формата даты MySQL.

Если вам нужны отрицательные часы от метку

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

этой

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

вернет отрицательные и положительные значения, если вам нужно использовать x>this_timestamp

но это

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

вернутся только положительные, часы