我想将字符串转换为日期时间,但它不起作用..
<?php
$date = date_create_from_format('d_m_Y_H_i_s', '29_11_2016_5_0_15');
echo date_format($date, 'Y-m-d');
返回
Warning: date_format() expects parameter 1 to be DateTimeInterface, boolean given ...
解决方案是什么?
答案 0 :(得分:0)
date_create_from_format()
在失败时返回false,或者在成功时返回新的DateTime实例。
你的失败是因为分钟是两位数,而不是一位数。使用29_11_2016_5_0_15
作为时间字符串会产生以下错误
无法找到两位数分钟
简单地说,您需要使用29_11_2016_5_00_15
作为时间字符串,就像这样
// Try to create the datetime instance
if ($date = date_create_from_format('d_m_Y_H_i_s', '29_11_2016_5_00_15')) {
echo date_format($date, 'Y-m-d');
} else {
// It failed! Errors found, let's figure out what!
echo "<pre>";
print_r(date_get_last_errors());
echo "</pre>";
}
以上代码段的输出为2016-11-29
,现场演示:https://3v4l.org/6om9g
使用date_get_last_errors()
,您将能够获得DateTime实例中给出的错误。
答案 1 :(得分:0)
你必须使用带有两个字符的minutes,在你的代码中只有一个带有前导0的字符。
所以只需用前导0填充它。
<?php
$string = '29_11_2016_5_0_15';
$array = explode('_', $string);
$array[4] = str_pad($array[4], 2, 0, STR_PAD_LEFT);
$string = implode('_', $array);
$date = date_create_from_format('d_m_Y_H_i_s', $string);
echo date_format($date, 'Y-m-d');