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

mat*_*thy 470 php formatting date

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

这怎么可能?

ric*_*age 1014

使用strtotime()date():

$originalDate = "2010-03-21";
$newDate = date("d-m-Y", strtotime($originalDate));
Run Code Online (Sandbox Code Playgroud)

(请参阅PHP站点上的strtotime日期文档.)

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

  • 如果我从mySQL获得这个date 0000-00-00怎么办?它返回错误的日期,如31/12/1969 ... (14认同)
  • @Enrique:如果你从MySQL获得000-00-00,你应该在进行转换之前测试该FIRST.Simples. (3认同)
  • 如果日期是"1000-01-01",它也不起作用! (2认同)
  • @SobinAugustine 等人:strtotime() 会将日​​期字符串转换为“Unix 时间戳(自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数)”,这是一种 date() 可以理解的格式,然后从中进行转换。所以这不适用于 1970 年之前的时间戳。 (2认同)

cei*_*roa 262

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

$myDateTime = DateTime::createFromFormat('Y-m-d', $dateString);
$newDateString = $myDateTime->format('d-m-Y');
Run Code Online (Sandbox Code Playgroud)

或者,等效地:

$newDateString = date_format(date_create_from_format('Y-m-d', $dateString), 'd-m-Y');
Run Code Online (Sandbox Code Playgroud)

你首先给它$ dateString所在的格式.然后你告诉它你想要$ newDateString的格式.

或者如果源格式始终是"Ymd"(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
?>
Run Code Online (Sandbox Code Playgroud)

  • 谢谢```DateTime :: createFromFormat()``` - 它比```strtotime()```更有用 (14认同)
  • Oneliner:`(new DateTime($ date)) - > format('Ym-d')` (5认同)
  • 注意:前两种方法需要PHP 5.3+. (2认同)

Tim*_*tle 71

使用:

implode('-', array_reverse(explode('-', $date)));
Run Code Online (Sandbox Code Playgroud)

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

  • 不明白为什么这个答案的票数较少.它应该是最高投票的答案.它只是简单快速地解决了这个问题而没有任何问题.谢谢 (5认同)
  • 在转换非美国日期格式时对我有用... dd-mm-yyyy => yyyy-mm-dd请参阅http://www.php.net/manual/en/datetime.formats.date.php (2认同)
  • 如果您需要将日期格式反转为原始格式,您甚至可以再次调用它.确实是最佳答案.:) (2认同)

Alp*_*arı 36

$newDate = preg_replace("/(\d+)\D+(\d+)\D+(\d+)/","$3-$2-$1",$originalDate);
Run Code Online (Sandbox Code Playgroud)

此代码适用于每种日期格式.

由于您的旧日期格式,您可以更改替换变量的顺序,例如$ 3- $ 1- $ 2.


Kev*_*vin 27

$timestamp = strtotime(your date variable); 
$new_date = date('d-m-Y', $timestamp);
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅文档strtotime.

甚至更短:

$new_date = date('d-m-Y', strtotime(your date variable));
Run Code Online (Sandbox Code Playgroud)


Gab*_*iel 26

另一个模糊的可能性:

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

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


Igo*_*nin 17

注意:因为这篇文章的回答有时会被提升,所以我回到这里,请求人们不要再投票了.我的答案是古老的,技术上不正确,这里有几种更好的方法.我只是为了历史目的而把它留在这里.

尽管文档很难描述strtotime函数,但@rjmunro在他的评论中正确地解决了这个问题:它是ISO格式的日期"YYYY-MM-DD".

此外,即使我的Date_Converter功能可能仍然有效,我想警告下面可能有不精确的陈述,所以请不要理会它们.

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

在PHP的strtotime手册在这里指出,"函数需要接受一个包含英语日期格式的字符串".它实际意味着它预期美国的美国日期格式,例如"mdY"或"m/d/Y".

这意味着以"Ymd"提供的日期可能会被误解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
Run Code Online (Sandbox Code Playgroud)

  • 最佳答案并非不正确.PHP使用ISO格式日期"YYYY-MM-DD"做正确的事情.它不能将它误解为美国日期,因为它在开始时有4位数字,它使用 - 不是/作为分隔符.ISO日期经过精心设计,不会与其他格式混淆. (3认同)
  • 继续阅读,我喜欢Ceiroa修复它.这比爆炸/破坏日期更容易. (2认同)

小智 14

有两种方法可以实现此目的:

1.

    $date = strtotime(date);
    $new_date = date('d-m-Y', $date);
Run Code Online (Sandbox Code Playgroud)

2.

    $cls_date = new DateTime($date);
    echo $cls_date->format('d-m-Y');
Run Code Online (Sandbox Code Playgroud)


Sin*_*nan 9

你可以试试strftime()功能.就像是strftime($time, '%d %m %Y');


小智 9

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

$newdate = date("D, d M Y", strtotime($date));
Run Code Online (Sandbox Code Playgroud)

它将以以下非常好的格式显示日期

2020 年 11 月 16 日星期一


Jua*_*one 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);
}
Run Code Online (Sandbox Code Playgroud)


小智 7

下面给出了生成明天日期的PHP代码,mktime()并将其格式更改为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);
Run Code Online (Sandbox Code Playgroud)


Abd*_*sit 5

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