以秒为单位的微时间,带有2个小数


microtime in second with 2 decimals

我尝试用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 second

例如

,它返回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

我认为你的问题来自于(float)$hours$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"

我使用这个表单生成以秒为单位的时间,例如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函数的性能比较示例:

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