20

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

030
  • 10,842
  • 12
  • 78
  • 123

6 Answers6

43

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();
Abela
  • 1,225
  • 3
  • 19
  • 42
John Conde
  • 217,595
  • 99
  • 455
  • 496
25

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.

wvanbergen
  • 2,294
  • 15
  • 15
  • 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. – wvanbergen Jan 18 '09 at 17:59
  • 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. – Alnitak Jan 18 '09 at 18:52
  • 1
    not that the user specified MySQL, and the UNIX_TIMESTAMP() function is not a standard SQL function... – Alnitak Jan 18 '09 at 18:53
  • 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? – dcousineau Jan 18 '09 at 20:00
  • Timestamps from files already are in unix timestamp format when using PHP functions, the question is tagged SQL and the presented date format is exactly like MySQL returns datetime values. I am not saying this is the only options or the best option, just that it is another approach. – wvanbergen Jan 19 '09 at 02:06
  • 1
    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. – elcuco Jan 30 '13 at 09:49
9

@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".

ceejayoz
  • 176,543
  • 40
  • 303
  • 368
  • 2
    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. – wvanbergen Jan 18 '09 at 17:58
  • yup, in fact the manual doesn't actually say whether this particular date-time format is supported. That's why I recommended strptime() instead. – Alnitak Jan 19 '09 at 00:46
  • I actually wrapped a website around the strtotime() function in case it helps anyone: www.unixstamp.com – soulkphp Aug 24 '11 at 04:32
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);
}
devasia2112
  • 5,844
  • 6
  • 36
  • 56
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.

Alnitak
  • 334,560
  • 70
  • 407
  • 495
-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];
}
johnboiles
  • 3,494
  • 1
  • 32
  • 26
  • 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. – Stefan Paul Noack May 14 '12 at 14:03