无法找出 DateTime::createFromFormat 失败的原因

Bha*_*oha 5 php datetime

我有另一个开发人员编写的代码片段

$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,但我不明白它为什么这样做。

这可能是什么原因造成的?

感谢您的时间!

Hen*_*rik 6

.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)