Strtotime with European date format

I am trying to use strtotime to convert the following date:

07/09/2009 17:01:27

This is the Europe / London time zone format for September 7

The function inverts the month and days, is there a workaround? thank

+2


source to share


5 answers


try:

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

      

or try this first, maybe:



date_default_timezone_set('Europe/London');

      

I think the best answer is not to use strtotime as you can never be 100% accurate with it

+1


source


Change /

to -

, it looks like PHP gets it /

as a US format, but -

as a European one. You can look here:

$date = "06/10/2011 14:28"; // 6 october 2011 2:28 pm
$otherDate = "06-10-2011 14:28"; // 6 october 2011 2:28 pm

echo $stamp = strtotime($date) . "<br />"; // outputs 1307708880
echo $otherStamp = strtotime($otherDate) . "<br />"; // outputs 1317904080

echo date("d-m", $stamp); // outputs 10-06
echo date("d-m", $otherStamp); // outputs 06-10

      



http://www.php.net/manual/es/function.strtotime.php#106043

+18


source


If you are not using Windows, you can use strptime

and explicitly set the format. As OIS points out, strptime

not available on Windows.

To convert from split year / month / day etc values ​​to unix timestamp you can pass them to mktime

. A bit awkward, but it works.

One of the reasons you could 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 outputs 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] =>
)

      

+5


source


DateTime can handle this easily:

$datetime = new DateTime('07/09/2009 17:01:27', new DateTimeZone('Europe/London'));
echo $datetime->format('d/m/Y H:i:s');

      

See it in action

+5


source


Here's a quick solution that 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";

      

+1


source







All Articles