我想把一个日期从yyyy-mm-dd
转换成dd-mm-yyyy
(但不是在SQL中)。然而,我不知道如何做到这一点,因为日期函数需要一个时间戳,并且我无法从这个字符串中获取时间戳。
这怎么可能呢?
我想把一个日期从yyyy-mm-dd
转换成dd-mm-yyyy
(但不是在SQL中)。然而,我不知道如何做到这一点,因为日期函数需要一个时间戳,并且我无法从这个字符串中获取时间戳。
这怎么可能呢?
如果您想避免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
?>
DateTime::createFromFormat()
- 它比strtotime()
更有用。 - Gtxstrtotime()
函数用于将真实格式(Y-m-d)转换为其他格式,但是DateTime::createFromFormat()
函数则是通用性更强的选择。
它类似于MySQL中的STR_TO_DATE
函数。 - Taron Saribekyanstrtotime()
。 - Code Cookerstrtotime
如何工作。 - Salman A使用:
implode('-', array_reverse(explode('-', $date)));
没有日期转换的开销,我不确定它是否会有太大影响。
d-M-Y
,而你想要转换成Y-m-d
,该怎么办呢? - krishna$date[0]."/".date('m', strtotime($date[1]))."/".$date[2]
更方便。将月份转换为数字,如果不生效,请尝试strtotime,这可能是由于时区引起的。 - KingRider$newDate = preg_replace("/(\d+)\D+(\d+)\D+(\d+)/","$3-$2-$1",$originalDate);
这段代码适用于任何日期格式。
您可以根据自己的旧日期格式更改替换变量的顺序,例如$3-$1-$2。
$timestamp = strtotime(your date variable);
$new_date = date('d-m-Y', $timestamp);
更多信息请参见strtotime函数的文档。
甚至可以更简短:
$new_date = date('d-m-Y', strtotime(your date variable));
还有另外一个不常见的可能性:
$oldDate = '2010-03-20'
$arr = explode('-', $oldDate);
$newDate = $arr[2].'-'.$arr[1].'-'.$arr[0];
我不知道是否会使用它,但还是保留一下 :)
有两种实现方法:
1.
$date = strtotime(date);
$new_date = date('d-m-Y', $date);
2.
->2.
$cls_date = new DateTime($date);
echo $cls_date->format('d-m-Y');
注意:由于本帖答案有时会被点赞,我特意回来友善地请求大家不要再点赞了。我的回答已经过时、技术上不正确,而且还有几种更好的方法可供选择。我只是为了历史记录而保留它。
尽管strtotime函数的文档描述非常贫乏,但 @rjmunro 在他的评论中正确地解决了这个问题:日期应该使用 ISO 格式 "YYYY-MM-DD"。
此外,即使我的Date_Converter函数仍然有效,但我想警告一下,下面可能有不准确的陈述,请忽略它们。
得票最多的答案实际上是不正确的!
PHP strtotime手册在这里指出:“该函数期望获得一个包含英文日期格式的字符串”。实际上,它期望的是美国日期格式,例如“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
在PHP中,可以使用不同的方案将任何日期转换为所需的日期格式,例如将任何日期格式更改为“Day, Date Month Year”。
$newdate = date("D, d M Y", strtotime($date));