首页 文章

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

提问于
浏览
413

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

这怎么可能?

12 回答

  • 30

    如果您想避免使用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
    ?>
    
  • 908

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

    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);
    }
    
  • 17
    $timestamp = strtotime(your date variable); 
    $new_date = date('d-m-Y', $timestamp);
    

    更多:

    点击here

    甚至更短:

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

    两种方法来实现这一点

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

    2)

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

    编辑:因为这篇文章的回答有时会被提升,所以我回到这里,请求人们不要再投票了 . 我的答案是古老的,技术上不正确,这里有几种更好的方法 . 我只是为了历史目的把它留在这里 . 虽然文档很难描述strtotime函数,但@rjmunro在他的评论中正确地解决了这个问题:它是ISO格式的日期“YYYY-MM-DD” . 此外,即使我的Date_Converter功能仍然可以工作,我想警告下面可能有不精确的陈述,所以请不要理会它们 .

    投票最多的答案实际上是不正确的!

    PHP strtotime手册here表明"The function expects to be given a string containing an English date format" . 它实际意味着它预期美国的美国日期格式,例如“m-d-Y”或“m / d / Y” .

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

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

    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
    
  • 237
    $newDate = preg_replace("/(\d+)\D+(\d+)\D+(\d+)/","$3-$2-$1",$originalDate);
    

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

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

  • 14

    另一个模糊的可能性:

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

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

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

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

  • 24

    你可以尝试strftime功能 . 像 strftime($time, '%d %m %Y'); 之类的东西

  • 63

    下面给出了使用 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);
    
  • 7
    date('m/d/Y h:i:s a',strtotime($val['EventDateTime']));
    
  • 25

    使用 strtotime()date()

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

    (请参阅PHP站点上的strtotimedate docs) .

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

相关问题