我尝试用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;
}
这个方法得到开始时间为$data…然后返回int second
例如,它返回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