2015-05-23 36 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