0

我尝试用 2 位小数以秒为单位计算一个动作的时间。

protected function microtimeFormat($data)
    {
        $duration = microtime(true) - $data;
        $hours = (int)($duration/60/60);
        $minutes = (int)($duration/60)-$hours*60;
        return $seconds = $duration-$hours*60*60-$minutes*60;

    }

此方法以 $data 形式获取开始时间...并在 int 秒内取回它

例如它返回 2 秒。

我尝试以 2 位小数获得第二...

protected function microtimeFormat($data,$format=null,$lng=null)
    {
        $duration = microtime(true) - $data;
        $hours = (float)($duration/60/60);
        $minutes = (float)($duration/60)-$hours*60;
        $seconds = $duration-$hours*60*60-$minutes*60;
        return number_format((float)$seconds, 2, '.', '');
    }

但它会在短时间内返回我 0.00

4

2 回答 2

0

我认为您的问题来自(float)转换为$hoursand $minutes。当你这样做时,你不会保存每个的小数部分,所以你的计算$seconds总是给出 0。转换为int这样你就可以实际保存它们各自代表$hours$minutes实际秒数。其余的去$seconds

protected function microtimeFormat($data,$format=null,$lng=null)
{
    $duration = microtime(true) - $data;
    $hours = (int)($duration/60/60);
    $minutes = (int)($duration/60)-$hours*60;
    $seconds = $duration-$hours*60*60-$minutes*60;
    return number_format((float)$seconds, 2, '.', '');
}

$start = microtime(TRUE);
sleep(1);
$delay = $this->microtimeFormat($start);
var_dump($delay);

这给了我:

string(4) "1.01"
于 2015-05-23T20:29:05.070 回答
0

我使用这种形式来生成以秒为单位的时间,例如1.20

$start = microtime(true);
for ($i=0; $i < 10000000; $i++) { 
    # code...
}
$end = microtime(true);

echo "<br>" . $time = number_format(($end - $start), 2);
// We get this: 1.20

一个比较 PHP 的 2 个函数的性能的例子:

define( 'NUM_TESTS', 1000000);

$start = microtime(true);

for( $i = 0; $i < NUM_TESTS; $i++)
{
    mt_rand();
}

$end = microtime(true) - $start;
echo 'mt_rand: ' . number_format(($end), 2) . "\n";

$start = microtime(true);

for( $i = 0; $i < NUM_TESTS; $i++)
{
    uniqid();
}

$end = microtime(true) - $start;
echo 'uniqid: ' . number_format(($end), 2) . "\n";
// We get this: mt_rand: 0.12 uniqid: 2.06
于 2016-09-07T15:05:49.027 回答