【问题标题】:PHP Fatal error: Call to a member function format() on booleanPHP 致命错误:在布尔值上调用成员函数 format()
【发布时间】:2020-02-23 17:35:08
【问题描述】:

崩溃:

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

格式错误?

【问题讨论】:

  • 两者都没有实际工作
  • $date = "10.06.2015 09:25:52"; echo Datetime::createFromFormat('d-m-Y h:i:s', $date)->format('Y-m-d h:i:s'); -作品
  • $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 datetime date-formatting


【解决方案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. h:i:s 应该是 H:i:s - 这解决了我的问题,h - 12 小时格式。谢谢
  • 另外,这是DateTime 而不是Datetime
【解决方案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);

编辑

由于浮点精度有时 floor 会带来不正确的 floor,所以我不得不使用更直接的方法:

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

【讨论】:

  • 或者你可以检查它是否不是小数并使用'U'
【解决方案3】:

当其他人试图通过特定用例来回答这个问题时,我认为是时候用一个一般性的答案来结束它了。

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

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

【讨论】:

    【解决方案4】:

    就我而言,我从输入字段发送了一个空值并得到错误

    解决方案:

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

    【讨论】:

      猜你喜欢
      • 2016-05-18
      • 1970-01-01
      • 2015-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-18
      相关资源
      最近更新 更多