2016-02-22 45 views
0

我尝试使用createFromFormat方法来格式化日期。问题是,如果日期不完整(缺少秒,分钟或小时),则会导致错误。有没有办法使这项工作,即使是不完整的日期,如下所示:DateTime :: createFromFormat和未完成日期

$my_sql_date = '2011-01-06 09:39'; 
$date2 = DateTime::createFromFormat('Y-m-d H:i:s', $my_sql_date); 
print_r(DateTime::getLastErrors()); 

Array ( 
     [warning_count] => 0 
     [warnings] => Array () 
     [error_count] => 1 
     [errors] => Array ([16] => Data missing) 
) 

谢谢!

+0

如果您在使用'createFromFormat()'然后,你必须指定你正在传递的日期/时间字符串格式相匹配的格式....否则它使'从format'创建一个相当无意义的方法名称....解决方案是确保字符串匹配格式,即使这意味着将“':00'”附加到该字符串的末尾 –

回答

0

为什么不使用默认__construct

$my_sql_date = '2011-01-06 09:39'; 
$date = new DateTime($my_sql_date); 
print_r($date); 

会产生

DateTime Object 
(
    [date] => 2011-01-06 09:39:00.000000 
    [timezone_type] => 3 
    [timezone] => US/Pacific 
) 

您可以事后格式化:

echo $date->format('Y-m-d H:i:s'); 

这将导致

2011-01-06 09:39:00 
1

您可以简单地使用DateTime对象的构造你的格式。

$incompleteData = '2011-01-06 09:39'; 
$date2 = new DateTime($incompleteData); 

以上将工作。

使用DateTime::createFromFormat。但用这种方法,你的不完整日期总是要符合指定的格式,所以上述方法是你最好的选择。

$incompleteData = '2011-01-06 09:39'; 
DateTime::createFromFormat('Y-m-d H:i', $incompleteData); 
相关问题