Converting to MySQL TIMESTAMPs from int(11)
Update: Imported on 6 Oct 08 from http://kitt.hodsden.com/
For MySQL 5+
mysql> SELECT FROM_UNIXTIME(created) FROM node WHERE nid = 10;+------------------------+ | from_unixtime(created) | +------------------------+ | 2005-05-22 10:22:04 | +------------------------+
For MySQL 4.1 and lower:
Having converted MySQL TIMESTAMPs to Drupal's int(11) style timestamps, which records the number of seconds since epoch (midnight, January 1st 1970), I also had cause to convert the other direction: from an int(11) to a MySQL TIMESTAMP. MySQL provides a utility function to convert from unix timestamps (the int(11) format):FROM_UNIXTIME
.
From the MySQL documentation:
Okay, so
FROM_UNIXTIME(
,unix_timestamp
)FROM_UNIXTIME(
unix_timestamp
,format
)Returns a representation of the
unix_timestamp
argument as a value in'YYYY-MM-DD HH:MM:SS'
orYYYYMMDDHHMMSS
format, depending on whether the function is used in a string or numeric context.
mysql> SELECT FROM_UNIXTIME(875996580); -> '1997-10-04 22:23:00' mysql> SELECT FROM_UNIXTIME(875996580) + 0; -> 19971004222300
If
format
is given, the result is formatted according to theformat
string.format
may contain the same specifiers as those listed in the entry for theDATE_FORMAT()
function.
mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(), -> '%Y %D %M %h:%i:%s %x'); -> '2003 6th August 06:22:58 2003'
FROM_UNIXTIME
can format the time/date in pretty much any way you'd like it, with the optional format argument.
Since we want the TIMESTAMP
format, force MySQL to treat the date as an integer by adding 0 to it:
mysql> SELECT FROM_UNIXTIME(creation_date) + 0 FROM paid_support LIMIT 1; +----------------------------------+ | FROM_UNIXTIME(creation_date) + 0 | +----------------------------------+ | 20031102084514 | +----------------------------------+ 1 row in set (0.00 sec)