[英]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 致命錯誤:調用成員 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
返回一個只有零作為小數的浮點數的特定時刻,出現了這個錯誤。
所以我不得不驗證它是否是小數並添加一個小數部分:
$aux = microtime(true);
$decimais = $aux - floor($aux);
if($decimais<=10e-5) $aux += 0.1;
$now = DateTime::createFromFormat('U.u', $aux);
編輯:
由於浮點精度有時 floor 會帶來 incorret floor,所以我不得不使用更直接的方法:
$aux = microtime(true);
$now = DateTime::createFromFormat('U.u', $aux);
if (is_bool($now)) $now = DateTime::createFromFormat('U.u', $aux += 0.001);
雖然其他人試圖通過特定用例來回答這個問題,但我認為是時候用一個通用的答案來結束它了。
致命錯誤:未捕獲錯誤:在 path/to/source/code/file.php 中調用 bool 上的成員函數 format()
引發此異常錯誤時,是因為format()
函數獲得了錯誤的日期格式字符串。 所以,嘗試根據https://www.php.net/manual/en/datetime.createfromformat.php #format檢查參數
就我而言,我從輸入字段發送了一個空值並得到了錯誤
解決方案:
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");
}
約翰康德的回答是正確的。 如果我們忘記了錯誤,就會出現錯誤,因為提供的輸入不符合格式字符串。
例子:
DateTime::createFromFormat('D M j h:i:s e Y','Fri Nov 4 12:59:59 UTC 2022');
將返回 DateTime object 而以下將返回false
。
DateTime::createFromFormat('D M j h:i:s e Y','Fri Nov 4 13:00:01 UTC 2022');
罪魁禍首是格式字符串'DM jh:i:se Y'
中的字母'h'
'。 對於 13:00:01 的 12 小時格式,您必須使用大寫字母'H'
。
如果您查看文檔,您會發現其中的區別。
h :帶前導零的小時的 12 小時格式
H :帶前導零的小時的 24 小時格式
基本上,如果您查看這個 function Datetime::createFromFormat
,您會發現 function 有 2 個可能的返回值,它們是DateTime
object 和false
。
發生該致命錯誤是因為您對無效的false
值調用 function format
。
所以你應該先檢查返回值,然后適當地繼續這個過程。 不僅適用於這種情況(日期時間),而且適用於具有多個可能返回值的其他函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.