PHP Неустранимая ошибка: вызов в функцию функции-члена() в булевом

Сбой:

<?php 
    $date = "13-06-2015 23:45:52";
    echo Datetime::createFromFormat('d-m-Y h:i:s',  $date)->format('Y-m-d h:i:s'); 
?>

PHP Неустранимая ошибка: вызов в формате функции-члена() в boolean

Но с другими датами хорошо работает:

<?php 
    $date = "10.06.2015 09:25:52";
    echo Datetime::createFromFormat('d-m-Y h:i:s',  $date)->format('Y-m-d h:i:s');
?>

Неверный формат?

Ответ 1

Ни один из примеров не работает, так как у вас есть несколько ошибок:

  1. Вы забыли свой второй параметр в Datetime::createFromFormat()
  2. h:i:s должно быть H:i:s
  3. Ваша дата во втором примере отделена . не -

Исправления:

<?php 
    $date = "13-06-2015 23:45:52";
    echo DateTime::createFromFormat('d-m-Y H:i:s', $date)->format('Y-m-d h:i:s'); 

    $date = "10.06.2015 09:25:52";
    echo DateTime::createFromFormat('d.m.Y H:i:s', $date)->format('Y-m-d h:i:s');
?>

Ответ 2

В моем случае я получал эту ошибку, потому что я использовал microtime(true) в качестве ввода:

$now = DateTime::createFromFormat('U.u', microtime(true));

В те моменты, когда microtime возвращает float с нулями как десятичными знаками, эта ошибка появилась.

Итак, мне пришлось проверить, если его десятичные числа и добавить десятичную часть:

$aux = microtime(true);
$decimais = $aux - floor($aux);
if($decimais<=10e-5) $aux += 0.1; 
$now = DateTime::createFromFormat('U.u', $aux);

ИЗМЕНИТЬ

Из-за точности с плавающей запятой иногда пол приносит пол безумца, поэтому мне пришлось использовать более прямой подход:

$aux =  microtime(true);
$now = DateTime::createFromFormat('U.u', $aux);        
if (is_bool($now)) $now = DateTime::createFromFormat('U.u', $aux += 0.001);

Ответ 3

В моем случае я отправил пустое значение из поля ввода и получил ошибку

решение:

if ($this->input->post('date_fo_return') != "") {
        $date_fo_return = $this->input->post('date_fo_return');
    $date_fo_return2 = DateTime::createFromFormat('d/m/Y', $date_fo_return);
    $data['date_fo_return'] = $date_fo_return2->format("Y-m-d H:i:s");
    }