在PHP中转换日期格式

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

这怎么可能呢?

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

要了解更多信息,请参见strtotime的文档

或者更短:

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

使用strtotime()date():

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

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

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

您可以尝试strftime()函数。简单的例子:strftime($time, '%d %m %Y');

还有一种模糊的可能性:

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

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

使用:

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

如果没有日期转换开销,我不确定它会有多大影响。

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

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

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

如果你想避免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的格式。

或者如果source-format总是“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
?>
因为这篇文章的答案有时会被点赞,所以我又回来了 在这里,我善意地请求人们不要再投票了。我的答案是 古老的,技术上不正确,还有几个更好的 接近这里。我只是把它保存在这里作为历史 目的。< / p > 虽然文档中对strtotime函数的描述很差, @rjmunro在他的评论中正确地解决了这个问题:它在ISO中 format date "YYYY-MM-DD".

此外,即使我的Date_Converter函数可能仍然工作,我将 想要警告的是,以下可能有不准确的陈述,所以请

投票最多的答案其实是错误的!< / >强

PHP strtotime手册在这里声明“该函数期望得到一个包含英文日期格式的字符串”。# EYZ1

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

我写了一个小函数,以几种格式返回日期。随意使用和修改。# EYZ0

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

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

有两种实现方法:

1.

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

2.

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

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

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);
}

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

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

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

使用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));

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

$date = '9/18/2019';

回声日期(d-m-y, strtotime(日期)美元);

结果:

18-09-19

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

使用date_createdate_format

试试这个。

function formatDate($input, $output){
$inputdate = date_create($input);
$output = date_format($inputdate, $output);
return $output;
}
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
在PHP中,任何日期都可以转换为所需的日期格式,使用不同的场景,例如将任何日期格式转换为 日,日期,月,年

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

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

2020年11月16日星期一