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
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
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
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] => )
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
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";