MySQL get the date n days ago as a timestamp

Mysql

Mysql Problem Overview


In MySQL, how would I get a timestamp from, say 30 days ago?

Something like:

select now() - 30

The result should return a timestamp.

Mysql Solutions


Solution 1 - Mysql

DATE_SUB will do part of it depending on what you want

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

Solution 2 - Mysql

You could use:

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

For unix timestamps or:

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

For the standard MySQL date format.

Solution 3 - Mysql

If you need negative hours from timestamp

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

this

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

will return negative and positive values, if you need to use x>this_timestamp

but this

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

will return only positive, hours

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBen NolandView Question on Stackoverflow
Solution 1 - MysqlJustin GiboneyView Answer on Stackoverflow
Solution 2 - MysqlhundredwattView Answer on Stackoverflow
Solution 3 - MysqlPetre SosaView Answer on Stackoverflow