-4

我已经看到了关于这个主题的几个问题,所有问题都有相同的基本答案。使用 microtime() 记录开始和结束时间,然后减去。大多数情况下这是有效的,除非事件跨越秒数增加的点。此时,结束时间可能小于开始时间。

您可以使用函数将秒添加到 microtime() 以获取秒 + 微时间吗?

例子:

function getSMtime() {
    return time() + (microtime() / 1000000);
}

$start = getSMtime();
... some code to be timed ...
$end = getSMtime();
echo "Time elapsed: " . ($end - $start) . " seconds.";
4

1 回答 1

6

您应该提供参数true以获取浮点数,而不是字符串:

 microtime(true)

文档中:

默认情况下,microtime()返回格式为“msec sec”的字符串,其中 sec 是自 Unix 纪元(格林威治标准时间 1970 年 1 月 1 日 0:00:00)以来的秒数,msec 测量自 sec 以来经过的微秒,也是以秒表示。

如果get_as_float设置为TRUE,则microtime()返回一个浮点数,它表示自 Unix 纪元以来的当前时间,以秒为单位,精确到最接近的微秒。

因此,如果您不提供此参数,则返回值将是一个字符串,如:

0.65538700 1481746900

...其中第一部分始终是介于 0 和 1 之间的值。如果像您一样将该结果字符串除以 1000000,则会发生到数字的隐式转换,从而忽略字符串的第二部分。因此,确实,您只能使用时间戳的微秒部分进行计算。

结论:使用true论据。

于 2016-12-14T20:18:42.573 回答