views:

561

answers:

3

Hi, I'm trying to use strtotime to convert the following date:

07/09/2009 17:01:27

It's the Europe/London timezone format for 7th of September

The function is inverting the month and the days, is there any workaround? thanks

+1  A: 

try:

strtotime(07/09/2009 17:01:27 GMT);

or try this first maybe:

date_default_timezone_set('Europe/London');

i guess the best answer is to not use strtotime as you can never be 100% with its accuracy

seengee
"...not use strtotime as you can never be 100% with its accuracy"The same can be said of any function that's not understood and used properly. strtotime() is a very useful and powerful function. One solution is to always format dates (for computation purposes) as "Y-m-d".
GZipp
+4  A: 

Providing you're not on Windows you can use strptime instead, and explicitly set the format. As OIS points out, strptime isn't available on Windows.

To convert from the split up year/month/day etc values to a unix timestamp you can pass them into mktime. Slightly fiddly, but it works.

One reason you might want to do this would be to print it in a different format using date.

From the strptime php.net page:

Example #1 strptime() example

<?php
  $format = '%d/%m/%Y %H:%M:%S';
  $strf = strftime($format);

  echo "$strf\n";

  print_r(strptime($strf, $format));
?>

The above example will output something similar to:

03/10/2004 15:54:19

Array
(
    [tm_sec] => 19
    [tm_min] => 54
    [tm_hour] => 15
    [tm_mday] => 3
    [tm_mon] => 9
    [tm_year] => 104
    [tm_wday] => 0
    [tm_yday] => 276
    [unparsed] =>
)
therefromhere
Note: This function is not implemented on Windows platforms.
OIS
+1  A: 

Here is a quick fix which should work. An alternative would be regex with named matches.

function eurototime($string)
{
    static $sorted = array(
     'tm_hour' => null,
     'tm_min' => null,
     'tm_sec' => null,
     'tm_mon' => null,
     'tm_mday' => null,
     'tm_year'  => null,
    );
    static $unsorted = array(
     'tm_mday',
     'tm_mon',
     'tm_year',
     'tm_hour',
     'tm_min',
     'tm_sec',

    );
    static $format = '%d/%d/%d %d:%d:%d';
    $parsed = sscanf($string, $format);
    $data = array_combine($unsorted, $parsed);
    $sortedData = array_merge($sorted, $data);
    $int = call_user_func_array('mktime', $sortedData);
    return $int;
}

date_default_timezone_set('Europe/London');
echo eurototime(date('d/m/Y H:i:s')), "\n", time(),"\n";
OIS