Strtotime与欧洲日期格式

时间:2009-09-07 15:15:09

标签: php string time

我正在尝试使用strtotime转换以下日期:

07/09/2009 17:01:27

这是9月7日的欧洲/伦敦时区格式

该功能正在反转月份和日期,是否有解决方法? 感谢

5 个答案:

答案 0 :(得分:19)

更改/的{​​{1}},好像PHP以美国格式获取-,而/为欧洲格式。你可以在这里看到:

-

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

答案 1 :(得分:5)

如果您不在Windows上,则可以使用strptime代替,并明确设置格式。正如OIS指出的那样,strptime在Windows上不可用。

要将拆分年/月/日等值转换为unix时间戳,您可以将它们传递到mktime。略显繁琐,但它确实有效。

您可能希望这样做的一个原因是使用date以不同的格式打印它。

来自strptime php.net页面:

  

示例#1 strptime()示例

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

  echo "$strf\n";

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

上面的例子将输出   类似于:

     

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

答案 2 :(得分:5)

DateTime可以轻松应对:

$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

答案 3 :(得分:2)

尝试:

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

或者先试试这个:

date_default_timezone_set('Europe/London');

我想最好的答案是不要使用strtotime,因为你的准确性永远不会是100%

答案 4 :(得分:1)

这是一个应该有效的快速修复方法。另一种方法是使用命名匹配的正则表达式。

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";