简单的PHP时间格式不起作用!

时间:2011-05-13 03:12:07

标签: php date

我有以下价值:

30/05/2010 @ 09:15:15

我需要将它转换为Y-m-d H:i:s。

我试过了:

$date = "30/05/2010 @ 09:15:15";
$formatteddate = date("Y-m-d H:i:s", time($date));
echo $formatteddate;

我最终获得了1970年的价值。我也尝试了strtotime。

任何人都可以指出我缺少的东西吗?

7 个答案:

答案 0 :(得分:6)

time()函数没有任何参数,这就是为什么它会给你一个错误。

我试图使用可能有用的strtotime()思考,但事实并非如此。当我找到有用的东西时,我会更新我的答案。但是,第一件事是time()不起作用。

编辑:菲尔刚刚在几秒钟之前击败了我:

$date = str_replace("@ ", "", "30/05/2010 @ 09:15:15");
$date = str_replace("/", "-", $date);
$formatteddate = date("Y-m-d H:i:s", strtotime($date));
echo $formatteddate;

示例在这里:http://codepad.org/heph1PG0

答案 1 :(得分:4)

如果您使用的是PHP 5.3,请尝试DateTime::createFromFormat(),例如

$dt = DateTime::createFromFormat('d/m/Y @ H:i:s', $date);

如果没有,strtotime()可能会有效,但您需要删除@符号并将正斜杠更改为连字符(如果这是欧盟/澳大利亚的日期),例如

$time = strtotime(str_replace(array('@', '/'), array('', '-'), $date));

修改

要以所需格式显示日期,请使用

echo $dt->format('Y-m-d H:i:s'); // for DateTime
echo date('Y-m-d H:i:s', $time); // for strtotime

答案 2 :(得分:1)

你有一些奇怪的格式...尝试date_parse_from_format。

http://www.php.net/manual/en/function.date-parse-from-format.php

$date = "30/05/2010 @ 09:15:15";

$d = date_parse_from_format('m/d/Y @ h:i:s', $date);

$formatted_date = "{$d['year']}-{$d['month']}-{$d['day']} {$d['hour']}:{$d['minute']}:{$d['second']}";

答案 3 :(得分:1)

您的日期格式非常奇怪,因此strtotime会有问题。相反,我们将使用接受自定义格式的strptime

$date = "30/05/2010 @ 09:15:15";
$format = "%d/%m/%Y @ %T";
$ftime = strptime($date, $format);
$timestamp = mktime( 
                $ftime['tm_hour'], 
                $ftime['tm_min'], 
                $ftime['tm_sec'], 
                // Because this is 0-11
                $ftime['tm_mon'] + 1,
                $ftime['tm_mday'], 
                // Because this is years since 1900
                $ftime['tm_year'] + 1900
             ); 
$formatteddate = date("Y-m-d H:i:s", $timestamp);
echo $formatteddate;

结果:

2010-05-30 09:15:15

答案 4 :(得分:1)

如果您使用的是PHP 5.3.0或更高版本,则可以使用date_parse_from_format()来解析自定义格式化日期。

如果您遇到旧版本的PHP,则必须自行解析。我已经证实这有效:

<?php
function reformatDate($date) {
    $matches = array();
    if (!preg_match('/^(\d\d)\/(\d\d)\/(\d{4})\s*@\s*(\d\d):(\d\d):(\d\d)$/', $date, $matches)) {
        throw new InvalidArgumentException('Invalid date supplied: ' . $date);
    }
    $day = $matches[1];
    $month = $matches[2];
    $year = $matches[3];
    $hour = $matches[4];
    $minute = $matches[5];
    $second = $matches[6];
    if ($day < 1 || $day > 31 || $month < 1 || $month > 12 || $hour > 24 || $minute > 60 || $second > 60) {
       throw new InvalidArgumentException('Invalid date supplied: ' . $date);
    }
    return "$year-$month-$day $hour:$minute:$second";
}

echo reformatDate("30/05/2010 @ 09:15:15");
?>

答案 5 :(得分:0)

对于所有人来说,guyz日期函数不会格式化日期,例如01/01/2045,这是对大日期日期的限制,即2039年。

答案 6 :(得分:-1)

尝试这样......

<?php
$date = date_create('01-01-2001');
echo date_format($date, 'Y-m-d H:i:s');
?>