转换日期格式yyyy-mm-dd => DD-MM-YYYY

时间:2010-03-21 17:11:13

标签: php date formatting

我正在尝试将日期从yyyy-mm-dd转换为dd-mm-yyyy(但不是在SQL中);但我不知道日期函数如何需要时间戳,我无法从该字符串中获取时间戳。

这怎么可能?

17 个答案:

答案 0 :(得分:968)

使用strtotime()date()

$originalDate = "2010-03-21";
$newDate = date("d-m-Y", strtotime($originalDate));

(请参阅PHP网站上的strtotimedate文档。)

请注意,这是对原始问题的快速解决方案。对于更广泛的转换,您应该使用DateTime类来解析和格式化: - )

答案 1 :(得分:251)

如果您想避免使用strtotime转换(例如,strtotime无法解析您的输入),您可以使用,

$myDateTime = DateTime::createFromFormat('Y-m-d', $dateString);
$newDateString = $myDateTime->format('d-m-Y');

或等同地:

$newDateString = date_format(date_create_from_format('Y-m-d', $dateString), 'd-m-Y');

你首先给它的格式是$ dateString。然后你告诉它你想要$ newDateString的格式。

或者如果源格式始终是“Y-m-d”(yyyy-mm-dd),那么只需使用DateTime

<?php
    $source = '2012-07-31';
    $date = new DateTime($source);
    echo $date->format('d.m.Y'); // 31.07.2012
    echo $date->format('d-m-Y'); // 31-07-2012
?>

答案 2 :(得分:69)

使用:

implode('-', array_reverse(explode('-', $date)));

如果没有日期转换开销,我不确定它是否重要。

答案 3 :(得分:26)

另一个模糊的可能性:

$oldDate = '2010-03-20'
$arr = explode('-', $oldDate);
$newDate = $arr[2].'-'.$arr[1].'-'.$arr[0];

我不知道我是否会使用它但仍然:)

答案 4 :(得分:26)

$timestamp = strtotime(your date variable); 
$new_date = date('d-m-Y', $timestamp);

有关详情,请参阅documentation for strtotime

甚至更短:

$new_date = date('d-m-Y', strtotime(your date variable));

答案 5 :(得分:17)

  

注意 :因为这篇文章的回答有时会被提升,我回来了   在这里,请人们不要再投票了。我的回答是   古老,技术上不正确,有几个更好   接近这里。我只是把它留在这里历史   目的。

     

虽然文档很难描述strtotime功能,   @rjmunro在他的评论中正确地解决了这个问题:它在ISO中   格式日期“YYYY-MM-DD”。

     

另外,即使我的Date_Converter功能仍然可以工作,我也会   我想警告下面可能有不精确的陈述,所以请   不要理会他们。

投票最多的回答实际上是错误的!

PHP strtotime手册here指出“该函数应该被赋予一个包含英文日期格式的字符串”。 它实际上意味着它需要一种美国美国日期格式,例如“m-d-Y”或“m / d / Y”。

这意味着提供为“Y-m-d”的日期可能会被strtotime误解释。您应该以预期的格式提供日期。

我写了一个小函数来以多种格式返回日期。随意使用和修改。 如果有人把它变成了一个班级,我会很高兴,如果这将被分享。

function Date_Converter($date, $locale = "br") {

    # Exception
    if (is_null($date))
        $date = date("m/d/Y H:i:s");

    # Let's go ahead and get a string date in case we've
    # been given a Unix Time Stamp
    if ($locale == "unix")
        $date = date("m/d/Y H:i:s", $date);

    # Separate Date from Time
    $date = explode(" ", $date);

    if ($locale == "br") {
        # Separate d/m/Y from Date
        $date[0] = explode("/", $date[0]);
        # Rearrange Date into m/d/Y
        $date[0] = $date[0][1] . "/" . $date[0][0] . "/" . $date[0][2];
    }

    # Return date in all formats
        # US
        $Return["datetime"]["us"] = implode(" ", $date);
        $Return["date"]["us"]     = $date[0];

        # Universal
        $Return["time"]           = $date[1];
        $Return["unix_datetime"]  = strtotime($Return["datetime"]["us"]);
        $Return["unix_date"]      = strtotime($Return["date"]["us"]);
        $Return["getdate"]        = getdate($Return["unix_datetime"]);

        # BR
        $Return["datetime"]["br"] = date("d/m/Y H:i:s", $Return["unix_datetime"]);
        $Return["date"]["br"]     = date("d/m/Y", $Return["unix_date"]);

    # Return
    return $Return;

} # End Function

答案 6 :(得分:14)

实现此目的有两种方法:

1

    $date = strtotime(date);
    $new_date = date('d-m-Y', $date);

2

    $cls_date = new DateTime($date);
    echo $cls_date->format('d-m-Y');

答案 7 :(得分:9)

您可以尝试strftime()功能。简单示例:strftime($time, '%d %m %Y');

答案 8 :(得分:8)

使用此功能可以从任何格式转换为任何格式

function reformatDate($date, $from_format = 'd/m/Y', $to_format = 'Y-m-d') {
    $date_aux = date_create_from_format($from_format, $date);
    return date_format($date_aux,$to_format);
}

答案 9 :(得分:7)

以下是使用mktime()生成明天日期的PHP代码,并将其格式更改为 dd / mm / yyyy 格式,然后使用echo进行打印。

$tomorrow = mktime(0, 0, 0, date("m"), date("d") + 1, date("Y"));
echo date("d", $tomorrow) . "/" . date("m", $tomorrow). "/" . date("Y", $tomorrow);

答案 10 :(得分:5)

date('m/d/Y h:i:s a',strtotime($val['EventDateTime']));

答案 11 :(得分:0)

对于此特定转换,我们还可以使用格式字符串。

fmap

很明显,这对于许多其他日期格式转换来说不起作用,但是由于在这种情况下我们只是重新排列子字符串,因此这是另一种可行的方法。

答案 12 :(得分:0)

简单方法使用strtotime()date()

$original_dateTime = "2019-05-11 17:02:07"; #This may be database datetime
$newDate = date("d-m-Y", strtotime($original_dateTime));

随着时间的流逝

$newDate = date("d-m-Y h:i:s a", strtotime($original_dateTime));

答案 13 :(得分:0)

您可以使用date()和strtotime()更改格式。

$ date ='9/18/2019';

echo date('d-m-y',strtotime($ date));

结果:

18-09-19

我们可以通过更改(d-m-y)来更改格式。

答案 14 :(得分:0)

使用date_createdate_format

尝试一下。

function formatDate($input, $output){
  $inputdate = date_create($input);
  $output = date_format($inputdate, $output);
  return $output;
}

答案 15 :(得分:0)

function dateFormat($date)
{
    $m = preg_replace('/[^0-9]/', '', $date);
    if (preg_match_all('/\d{2}+/', $m, $r)) {
        $r = reset($r);
        if (count($r) == 4) {
            if ($r[2] <= 12 && $r[3] <= 31) return "$r[0]$r[1]-$r[2]-$r[3]"; // Y-m-d
            if ($r[0] <= 31 && $r[1] != 0 && $r[1] <= 12) return "$r[2]$r[3]-$r[1]-$r[0]"; // d-m-Y
            if ($r[0] <= 12 && $r[1] <= 31) return "$r[2]$r[3]-$r[0]-$r[1]"; // m-d-Y
            if ($r[2] <= 31 && $r[3] <= 12) return "$r[0]$r[1]-$r[3]-$r[2]"; //Y-m-d
        }

        $y = $r[2] >= 0 && $r[2] <= date('y') ? date('y') . $r[2] : (date('y') - 1) . $r[2];
        if ($r[0] <= 31 && $r[1] != 0 && $r[1] <= 12) return "$y-$r[1]-$r[0]"; // d-m-y
    }
}

var_dump(dateFormat('31/01/00')); // return 2000-01-31
var_dump(dateFormat('31/01/2000')); // return 2000-01-31
var_dump(dateFormat('01-31-2000')); // return 2000-01-31
var_dump(dateFormat('2000-31-01')); // return 2000-01-31
var_dump(dateFormat('20003101')); // return 2000-01-31

答案 16 :(得分:0)

在PHP中,可以使用不同的方案将任何日期转换为所需的日期格式,例如将任何日期格式更改为 日期,日期,月份年份

$newdate = date("D, d M Y", strtotime($date));

它将以以下格式显示日期

2020年11月16日,星期一