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

2022-08-30 15:16:23

在以下情况下崩溃:

<?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 致命错误:在布尔值上调用成员函数 format()

但是对于其他日期效果很好:

<?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

因此,我必须验证其小数点是否并添加小数部分:

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

推荐