我有以下价值:
30/05/2010 @ 09:15:15
我需要将它转换为Y-m-d H:i:s。
我试过了:
$date = "30/05/2010 @ 09:15:15";
$formatteddate = date("Y-m-d H:i:s", time($date));
echo $formatteddate;
我最终获得了1970年的价值。我也尝试了strtotime。
任何人都可以指出我缺少的东西吗?
答案 0 :(得分:6)
time()函数没有任何参数,这就是为什么它会给你一个错误。
我试图使用可能有用的strtotime()思考,但事实并非如此。当我找到有用的东西时,我会更新我的答案。但是,第一件事是time()不起作用。
编辑:菲尔刚刚在几秒钟之前击败了我:
$date = str_replace("@ ", "", "30/05/2010 @ 09:15:15");
$date = str_replace("/", "-", $date);
$formatteddate = date("Y-m-d H:i:s", strtotime($date));
echo $formatteddate;
答案 1 :(得分:4)
如果您使用的是PHP 5.3,请尝试DateTime::createFromFormat()
,例如
$dt = DateTime::createFromFormat('d/m/Y @ H:i:s', $date);
如果没有,strtotime()
可能会有效,但您需要删除@
符号并将正斜杠更改为连字符(如果这是欧盟/澳大利亚的日期),例如
$time = strtotime(str_replace(array('@', '/'), array('', '-'), $date));
修改强>
要以所需格式显示日期,请使用
echo $dt->format('Y-m-d H:i:s'); // for DateTime
echo date('Y-m-d H:i:s', $time); // for strtotime
答案 2 :(得分:1)
你有一些奇怪的格式...尝试date_parse_from_format。
http://www.php.net/manual/en/function.date-parse-from-format.php
$date = "30/05/2010 @ 09:15:15";
$d = date_parse_from_format('m/d/Y @ h:i:s', $date);
$formatted_date = "{$d['year']}-{$d['month']}-{$d['day']} {$d['hour']}:{$d['minute']}:{$d['second']}";
答案 3 :(得分:1)
您的日期格式非常奇怪,因此strtotime
会有问题。相反,我们将使用接受自定义格式的strptime
:
$date = "30/05/2010 @ 09:15:15";
$format = "%d/%m/%Y @ %T";
$ftime = strptime($date, $format);
$timestamp = mktime(
$ftime['tm_hour'],
$ftime['tm_min'],
$ftime['tm_sec'],
// Because this is 0-11
$ftime['tm_mon'] + 1,
$ftime['tm_mday'],
// Because this is years since 1900
$ftime['tm_year'] + 1900
);
$formatteddate = date("Y-m-d H:i:s", $timestamp);
echo $formatteddate;
结果:
2010-05-30 09:15:15
答案 4 :(得分:1)
如果您使用的是PHP 5.3.0或更高版本,则可以使用date_parse_from_format()
来解析自定义格式化日期。
如果您遇到旧版本的PHP,则必须自行解析。我已经证实这有效:
<?php
function reformatDate($date) {
$matches = array();
if (!preg_match('/^(\d\d)\/(\d\d)\/(\d{4})\s*@\s*(\d\d):(\d\d):(\d\d)$/', $date, $matches)) {
throw new InvalidArgumentException('Invalid date supplied: ' . $date);
}
$day = $matches[1];
$month = $matches[2];
$year = $matches[3];
$hour = $matches[4];
$minute = $matches[5];
$second = $matches[6];
if ($day < 1 || $day > 31 || $month < 1 || $month > 12 || $hour > 24 || $minute > 60 || $second > 60) {
throw new InvalidArgumentException('Invalid date supplied: ' . $date);
}
return "$year-$month-$day $hour:$minute:$second";
}
echo reformatDate("30/05/2010 @ 09:15:15");
?>
答案 5 :(得分:0)
对于所有人来说,guyz日期函数不会格式化日期,例如01/01/2045,这是对大日期日期的限制,即2039年。
答案 6 :(得分:-1)
尝试这样......
<?php
$date = date_create('01-01-2001');
echo date_format($date, 'Y-m-d H:i:s');
?>