2015-05-23 34 views
0

我试着计算时间的第二个小数点后2位。microtime秒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; 

    } 

这种方法得到启动时间设置为$数据......,回到它的秒整型

例如,它的回报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短时间

+0

使用PHP的轮功能:http://php.net/manual/en/function.round.php –

+0

我试过你的代码,并收到2.0001289844513和2.00 - 这些是秒和number_format的结果 – splash58

回答

0

我觉得您的问题来自于(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" 
+0

你试过没有改变类型? – splash58

+0

没有。我想'floor()'应该可以做到。 – shadock

+0

如果我睡觉(70);'我得到的结果︰'字符串(5)“10.00”' – phpJs

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 

比较的2个功能的性能的示例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