26

Is there anyone sitting on a PHP function to convert a date of format 0000-00-00 00:00:00(datetimesql) to unix timestamp?

6 Answers 6

51

To do this in PHP 5.2 you can do this:

$datetime = new DateTime(); echo $datetime->format('U'); 

A newer way to do this as of PHP 5.3 is:

$datetime = new DateTime(); echo $datetime->getTimestamp(); 
Sign up to request clarification or add additional context in comments.

Comments

27

Another option as you have tagged this question with SQL: the MySQL functions FROM_UNIXTIME and UNIX_TIMESTAMP -> MySQL manual

 SELECT UNIX_TIMESTAMP(datetime_column) FROM table 

This usually is faster than a PHP function call.

6 Comments

I was asking myself the same question... :-) Always try to get the data out of the database as well as possible, as MySQL will always be faster than PHP.
I don't think the SQL stuff was in the question when I downvoted this - maybe the edit was during the 5 minute window where it doesn't appear in the edit history? Down-vote reversed.
not that the user specified MySQL, and the UNIX_TIMESTAMP() function is not a standard SQL function...
Alnitak has a valid point, there are a lot of assumptions concerning whether a DB is involved or not wvanbergen. What if he's grabbing timestamps from filenames?
No. No. Don't generate a call to the SQL server just to convert data. If you need this as part of a query - ok, but getting this trivial information out of process is BAD BAD BAD.
|
10

@bartek - As you noted, PHP's strtotime function is perfect for this. It can handle most common date formats, including strings like "tomorrow" or "+5 months".

3 Comments

Note that because it can handle so many formats, it is really slow. Do not use it if you are going to call it often.
yup, in fact the manual doesn't actually say whether this particular date-time format is supported. That's why I recommended strptime() instead.
I actually wrapped a website around the strtotime() function in case it helps anyone: www.unixstamp.com
6

I have a solution for you right here:

/* From MySQL datetime to Unix Timestamp 2003-12-30 23:30:59 -> 1072834230 */ function convertMysqlDateTimeToUnixTimeStamp($date) { $yr=strval(substr($date,0,4)); $mo=strval(substr($date,5,2)); $da=strval(substr($date,8,2)); $hr=strval(substr($date,11,2)); $mi=strval(substr($date,14,2)); $se=strval(substr($date,17,2)); return mktime($hr,$mi,$se,$mo,$da,$yr); } 

Comments

5

Use strptime() to parse the time and turn it into a structured array.

Then pass the results of that into the mktime() function to get a UNIX timestamp.

1 Comment

dunno - I'm 99% sure the question didn't mention SQL when I posted this answer
-3

Encapusulating wvanbergen's solution into a function (for your convenience)

//Convert SQL datetime to unixtime -- by johnboiles function datetimeToUnixtime($datetime){ $result = mysql_query("select unix_timestamp('$datetime')"); $unixtime = mysql_fetch_array($result); return $unixtime[0]; } 

1 Comment

this implies going to the database twice. wvanbergen's solution was meant to be applied to the where the data is fetched from the db in the first place.