我有另一个开发人员编写的代码片段
$date = DateTime::createFromFormat('U.u', microtime(TRUE));
$dateMicro = $date->format('Y-m-d H:i:s.u');
Run Code Online (Sandbox Code Playgroud)
它抛出这个错误:
错误:调用 bool 上的成员函数 format()
我猜这可能意味着 createFromFormat 返回 false,但我不明白它为什么这样做。
这可能是什么原因造成的?
感谢您的时间!
.u格式表明输入字符串包含.后跟(最多六位)数字。当返回的浮点数microtime(true)小数点后有 0 或超过 6 位数字时,您的代码将失败。
您可以使用以下脚本对其进行测试:
while (true) {
$time = microtime(true);
// potential fix
// $time = sprintf('%.6f', microtime(true));
echo $time , "\n";
$date = DateTime::createFromFormat('U.u', $time);
$dateMicro = $date->format('Y-m-d H:i:s.u');
}
Run Code Online (Sandbox Code Playgroud)
输出
...
1642510930.9999
1642510930.9999
1642510930.9999
1642510930.9999
1642510930.9999
1642510930.9999
1642510931
PHP Fatal error: Uncaught Error: Call to a member function format() on bool in .../test.php:7
Stack trace:
#0 {main}
thrown in .../test.php on line 7
Run Code Online (Sandbox Code Playgroud)