PHP 日期时间微秒始终返回 0

2022-08-30 08:42:20

此代码在 PHP 5.2.5 中始终返回 0 微秒:

<?php
$dt = new DateTime();
echo $dt->format("Y-m-d\TH:i:s.u") . "\n";
?>

输出:

[root@www1 ~]$ php date_test.php
2008-10-03T20:31:26.000000
[root@www1 ~]$ php date_test.php
2008-10-03T20:31:27.000000
[root@www1 ~]$ php date_test.php
2008-10-03T20:31:27.000000
[root@www1 ~]$ php date_test.php
2008-10-03T20:31:28.000000

有什么想法吗?


答案 1

这似乎有效,尽管 http://us.php.net/date 记录了微秒说明符但并不真正支持它似乎不合逻辑:

function getTimestamp()
{
        return date("Y-m-d\TH:i:s") . substr((string)microtime(), 1, 8);
}

答案 2

在构造对象时,可以指定输入包含微秒,并直接用作输入。DateTimemicrotime(true)

不幸的是,如果您击中精确的一秒,这将失败,因为微时间输出中没有;因此,在这种情况下,使用强制它包含:.sprintf.0

date_create_from_format(
    'U.u', sprintf('%.f', microtime(true))
)->format('Y-m-d\TH:i:s.uO');

或等效(更多OO风格)

DateTime::createFromFormat(
    'U.u', sprintf('%.f', microtime(true))
)->format('Y-m-d\TH:i:s.uO');

推荐