PHP致命错误:在布尔值上调用成员函数format()

时间:2015-06-10 00:04:33

标签: php datetime date-formatting

崩溃:

bash
  

PHP致命错误:在布尔值

上调用成员函数format()

但其他日期效果很好:

<?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'); 
?>

格式错误?

4 个答案:

答案 0 :(得分:19)

这两个示例都没有,因为您有多个错误:

  1. 您忘记了Datetime::createFromFormat()
  2. 的第二个参数
  3. h:i:s应为H:i:s
  4. 您在第二个示例中的日期由.而不是-
  5. 分隔

    修正:

    <?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');
    ?>
    

答案 1 :(得分:4)

在我的情况下,我收到此错误是因为我使用microtime(true)作为输入:

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

microtime返回一个只有零作为小数的浮点数的特定时刻,出现此错误。

所以我必须验证它的小数是否加上小数部分:

$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);

答案 2 :(得分:2)

虽然其他人试图用特定的用例来回答这个问题,但我认为是时候用一个一般性的回答来解决这个问题了。

致命错误:未捕获的错误:在bool中的path / to / source / code / file.php中调用成员函数format()

引发此异常错误时,是因为format()函数获取了错误的日期格式字符串。因此,请尝试根据https://www.php.net/manual/en/datetime.createfromformat.php#format

检查参数

答案 3 :(得分:0)

在我的情况下,我从输入字段发送了一个空值并得到错误

解决方案:

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");
    }