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
string php time


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 to share


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 to share


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 to share


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 to share


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 to share







All Articles
Loading...
X
Show
Funny
Dev
Pics