микротайм в секунду с двумя десятичными знаками

Я пытаюсь рассчитать время действия в секунду с двумя десятичными знаками.

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 … и возвращает его в секунду

например, он возвращает 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

Решение

Я думаю, что ваша проблема исходит от (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

Другие решения

Я использую эту форму для генерации времени в секундах, например 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
0

По вопросам рекламы [email protected]