代码之家  ›  专栏  ›  技术社区  ›  matthy

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

  •  430
  • matthy  · 技术社区  · 16 年前

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

    这怎么可能?

    12 回复  |  直到 7 年前
        1
  •  942
  •   Peter Mortensen Pieter Jan Bonestroo    7 年前

    使用 strtotime() 和 date() :

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

    (见 strtotime 和 date php站点上的文档。)

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

        2
  •  245
  •   Peter Mortensen Pieter Jan Bonestroo    7 年前

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

    $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
    ?>
    
        3
  •  67
  •   Peter Mortensen Pieter Jan Bonestroo    7 年前

    用途:

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

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

        4
  •  32
  •   Alper Sarı    14 年前
    $newDate = preg_replace("/(\d+)\D+(\d+)\D+(\d+)/","$3-$2-$1",$originalDate);
    

    此代码适用于所有日期格式。

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

        5
  •  25
  •   Finduilas    10 年前

    另一个模糊的可能性是:

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

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

        6
  •  25
  •   Peter Mortensen Pieter Jan Bonestroo    7 年前
    $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));
    
        7
  •  17
  •   Peter Mortensen Pieter Jan Bonestroo    7 年前

    注释 :因为这个帖子的答案有时会被投票,所以我回来了 请大家不要再投票了。我的答案是 古代的,技术上不正确的,还有一些更好的 就在这里。我把它放在这里只是为了历史 目的。

    尽管文档对strtotime函数的描述很差, @Rjmunro在他的评论中正确地解决了这个问题:它在ISO中 格式日期“yyyy-mm-dd”。

    而且,即使我的日期转换器功能可能仍然可以工作,我会 我想提醒你,下面可能有不准确的陈述,所以请 不要理会他们。

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

    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
    
        8
  •  14
  •   Peter Mortensen Pieter Jan Bonestroo    7 年前

    实现这一点有两种方法:

    1。

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

    2。

        $cls_date = new DateTime($date);
        echo $cls_date->format('d-m-Y');
    
        9
  •  9
  •   kamal pal    11 年前

    你可以试试 strftime 功能。有点像 strftime($time, '%d %m %Y');

        10
  •  8
  •   Juan Girini    11 年前

    使用此函数可将任何格式转换为任何格式

    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);
    }
    
        11
  •  7
  •   Peter Mortensen Pieter Jan Bonestroo    12 年前

    下面是生成明天日期的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);
    
        12
  •  5
  •   kamal pal    11 年前
    date('m/d/Y h:i:s a',strtotime($val['EventDateTime']));