我正在尝试将日期从转换yyyy-mm-dd
为dd-mm-yyyy
(但是在SQL中不是); 但是我不知道date函数如何需要时间戳,并且无法从该字符串获取时间戳。
这怎么可能?
我正在尝试将日期从转换yyyy-mm-dd
为dd-mm-yyyy
(但是在SQL中不是); 但是我不知道date函数如何需要时间戳,并且无法从该字符串获取时间戳。
这怎么可能?
Answers:
使用strtotime()
和date()
:
$originalDate = "2010-03-21";
$newDate = date("d-m-Y", strtotime($originalDate));
请注意,这是对原始问题的快速解决方案。为了进行更广泛的转换,您实际上应该使用DateTime
该类来解析和格式化:-)
如果您想避免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的格式。
或者,如果源格式始终为“ Ymd”(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()
strtotime()
用于将True Type格式(Ymd)转换为其他格式,但是DateTime::createFromFormat()
很通用。这就像STR_TO_DATE
在MySQL
strtotime()
采用:
implode('-', array_reverse(explode('-', $date)));
没有日期转换的开销,我不确定这会很重要。
$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));
注意:由于此帖子的答案有时会被高估,所以我回到这里是为了请人们不要再对其进行投票。我的答案很古老,在技术上并不正确,这里有几种更好的方法。我仅出于历史目的将其保留在此处。
尽管文档很少描述strtotime函数,但@rjmunro在其注释中正确地解决了该问题:它的ISO格式为日期“ YYYY-MM-DD”。
另外,即使我的Date_Converter函数仍然可以运行,我也要警告下面可能有不精确的语句,因此请不要理会它们。
投票最多的答案实际上是不正确的!
PHP strtotime手册在此处指出:“该函数期望提供包含英语日期格式的字符串”。它的实际含义是期望使用美国的美国日期格式,例如“ mdY”或“ m / d / Y”。
这意味着提供的日期“ Ymd”可能会被误解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
有两种方法可以实现此目的:
1。
$date = strtotime(date);
$new_date = date('d-m-Y', $date);
2。
$cls_date = new DateTime($date);
echo $cls_date->format('d-m-Y');
您可以尝试该strftime()
功能。简单的例子:strftime($time, '%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);
}
date('m/d/Y h:i:s a',strtotime($val['EventDateTime']));
对于此特定的转换,我们还可以使用格式字符串。
$new = vsprintf('%3$s-%2$s-%1$s', explode('-', $old));
显然,这不适用于许多其他日期格式转换,但是由于在这种情况下我们只是重新排列子字符串,因此这是另一种可行的方法。
strtotime()
。:-)
简单方法使用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_create
和date_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 ($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
}
}
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