2015-05-23 3 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; 

    } 

этот метод получить начальное время, как $ данных ... и получить обратно ему ИНТ второго

, например, это возвращение 2second.

Я пытаюсь получить второе с 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

if i do 'sleep (70);' i get result: 'string (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 
Смежные вопросы