【问题标题】:Python time.time() in PHPPHP 中的 Python time.time()
【发布时间】:2021-11-20 06:32:38
【问题描述】:

在 Python 中,time.time() 将与当前时间关联的时间戳返回到小数点后 6 位,在 PHP 中,microtime(true) 将当前时间返回到小数点后 4 位。有什么办法可以让 PHP 中的当前时间精确到小数点后 6 位?谢谢。

Python:1632816181.314063

PHP:1632816181.3140

【问题讨论】:

  • 在 Python 中,time.time() 返回一个 浮点 数,它没有“6 位小数”或“4 位小数”,但显示的小数位数取决于关于数字的值以及如何输出它。我确信这在 PHP 中是相似的。

标签: python php time


【解决方案1】:

你可以试试这个我认为根据你的要求工作的完美。

<?php 
    $now = DateTime::createFromFormat('U.u', microtime(true));
    $timestamp = $now->getTimestamp();
    echo $data = $timestamp.".".$now->format("u");
    
    // Result :- 1632823152.201900
    
    ?>

【讨论】:

  • 非常感谢
  • 是的兄弟@Lucilfer
  • 我很感兴趣并且有点怀疑createFromFormat() 将如何处理微时间浮点值。这有点令人失望,但似乎 PHP 正在截断浮点值并失去一些精度 :-( 但至少它总是显示 6 位数字(通常用零填充)。
  • 是的,我知道总是显示 6 位数字,因为在时间戳显示微时间后需要 6 位数字。他检查了 python 编程和 php 上的显示一样。
【解决方案2】:

我的印象是 PHP 中的浮点数默认使用 echoprint 命令显示,没有您想要的所有小数。

printf()sprintf()%f 说明符一起使用,并添加您想要的位数。在您的情况下,6 位数字将是 %.6f:

<?php

// Save the floating-point Unix timestamp just for comparing below.
$microtime = microtime(true);

echo 'echo $microtime            : ' . $microtime . "\n";
printf("printf(\"%%.6f\", \$microtime) : %.6f\n", $microtime);

// Some have proposed to create a DateTime instance.
$datetime = DateTime::createFromFormat('U.u', $microtime);
echo "DateTime::format('U.u')    : " . $datetime->format('U.u') . "\n";

这会输出以下内容:

echo $microtime            : 1632834055.1038
printf("%.6f", $microtime) : 1632834055.103771
DateTime::format('U.u')    : 1632834055.103800

正如您所见,这似乎很奇怪,但 PHP 的 DateTime 类在某处降低了该过程的一些精度。 u 的结果格式似乎在末尾填充了零。

Test the PHP code here

【讨论】:

  • 是的,这也有效,但我只是注意到在 python time.time() 中它有时甚至返回 7 或 5 位小数,使用 printf() 它将固定为 6 位小数,并且日期时间::format()
  • 是的,除了 DateTime 我们会以某种方式失去精度:-/
猜你喜欢
  • 2020-11-27
  • 2011-09-02
  • 2021-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-04
  • 2010-09-10
相关资源
最近更新 更多