2016-02-22 2 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); 
Смежные вопросы