PHP Fatal error: Call to a member function format() on boolean
PHP Fatal error: Call to a member function format() on boolean
崩溃时间:
<?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 Fatal error: Call to a member function format() on 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');
?>
格式错误?
这两个示例都不起作用,因为您有多个错误:
- 您忘记了
Datetime::createFromFormat()
的第二个参数
h:i:s
应该是 H:i:s
- 您在第二个示例中的日期由
.
而非 -
分隔
修复:
<?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');
?>
在我的例子中,我收到此错误是因为我使用 microtime(true)
作为输入:
$now = DateTime::createFromFormat('U.u', microtime(true));
在microtime
returns一个只有零作为小数的浮点数的特定时刻,出现了这个错误。
所以我必须验证它是否是小数并添加小数部分:
$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);
在我的例子中,我从输入字段发送了一个空值并得到了错误
解决方案:
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");
}
虽然其他人试图用一个特定的用例来回答这个问题,但我认为是时候用一个通用的答案来结束它了。
Fatal error: Uncaught Error: Call to a member function format() on bool in path/to/source/code/file.php
出现此异常错误时,是因为 format()
函数获取了错误的日期格式字符串。因此,尝试根据https://www.php.net/manual/en/datetime.createfromformat.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');
?>
PHP Fatal error: Call to a member function format() on 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');
?>
格式错误?
这两个示例都不起作用,因为您有多个错误:
- 您忘记了
Datetime::createFromFormat()
的第二个参数
h:i:s
应该是H:i:s
- 您在第二个示例中的日期由
.
而非-
分隔
修复:
<?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');
?>
在我的例子中,我收到此错误是因为我使用 microtime(true)
作为输入:
$now = DateTime::createFromFormat('U.u', microtime(true));
在microtime
returns一个只有零作为小数的浮点数的特定时刻,出现了这个错误。
所以我必须验证它是否是小数并添加小数部分:
$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);
在我的例子中,我从输入字段发送了一个空值并得到了错误
解决方案:
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");
}
虽然其他人试图用一个特定的用例来回答这个问题,但我认为是时候用一个通用的答案来结束它了。
Fatal error: Uncaught Error: Call to a member function format() on bool in path/to/source/code/file.php
出现此异常错误时,是因为 format()
函数获取了错误的日期格式字符串。因此,尝试根据https://www.php.net/manual/en/datetime.createfromformat.php#format