Я пытаюсь рассчитать время действия в секунду с двумя десятичными знаками.
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 за короткое время
Я думаю, что ваша проблема исходит от (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