关于php:转换日期格式yyyy-mm-dd =>

Convert date format yyyy-mm-dd => dd-mm-yyyy

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

这怎么可能?


使用strtotime()date()

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

(请参阅PHP站点上的strtotime和date文档。)

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


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

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

或者,等价地:

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

您首先给出$datestring的格式。然后告诉它您希望$newDateString使用的格式。

或者,如果源格式始终为"y-m-d"(yyyy-mm-dd),则只使用日期时间:

1
2
3
4
5
6
<?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
?>


用途:

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

如果没有日期转换开销,我不确定这会有多重要。


1
$newDate = preg_replace("/(\d+)\D+(\d+)\D+(\d+)/","$3-$2-$1",$originalDate);

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

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


另一个模糊的可能性是:

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

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


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

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

或者更短:

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


Note: Because this post's answer sometimes gets upvoted, I came back
here to kindly ask people not to upvote it anymore. My answer is
ancient, not technically correct, and there are several better
approaches right here. I'm only keeping it here for historical
purposes.

Although the documentation poorly describes the strtotime function,
@rjmunro correctly addressed the issue in his comment: it's in ISO
format date"YYYY-MM-DD".

Also, even though my Date_Converter function might still work, I'd
like to warn that there may be imprecise statements below, so please
do disregard them.

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

这里的php strtotime手册指出,"应该给函数一个包含英文日期格式的字符串"。它实际上意味着它期望美国日期格式,例如"m-d-y"或"m/d/y"。

这意味着,提供为"Y-M-D"的日期可能会被strtotime误解。您应该以预期的格式提供日期。

我编写了一个小函数来返回几种格式的日期。随意使用和修改。如果有人真的把它变成了一个类,我会很高兴如果它是共享的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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


实现这一点有两种方法:

1。

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

2。

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


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


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

1
2
3
4
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);
}


下面给出了使用mktime()生成明天日期的PHP代码,将其格式更改为dd/mm/yyyy格式,然后使用echo打印。

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


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


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

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

随着时间的推移

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


对于这个特定的转换,我们也可以使用格式字符串。

1
$new = vsprintf('%3$s-%2$s-%1$s', explode('-', $old));

显然,这对于许多其他的日期格式转换都不起作用,但是由于我们在本例中只是重新排列子字符串,所以这是另一种可能的方法。