大家好我正在尝试计算php中的已用时间。问题不在于php,而在于我的数学技能。例如: 时间:11:35:20(hh:mm:ss),现在说当前时间是:12:00:45(hh:mm:ss)然后我的公式中的时差给出输出: 1 :-34:25 即可。它应该是:25:25
$d1=getdate();
$hournew=$d1['hours'];
$minnew=$d1['minutes'];
$secnew=$d1['seconds'];
$hourin = $_SESSION['h'];
$secin = $_SESSION['s'];
$minin = $_SESSION['m'];
$h1=$hournew-$hourin;
$s1=$secnew-$secin;
$m1=$minnew-$minin;
if($s1<0) {
$s1+=60; }
if($s1>=(60-$secin)) {
$m1--; }
if($m1<0) {
$m1++; }
echo $h1 . ":" . $m1 . ":" . $s1;
请帮忙吗?
修改
很抱歉,我可能不得不补充说每秒刷新页面以显示新的已用时间,所以我必须使用上面的方法。对于没有正确解释,我深表歉意。
答案 0 :(得分:46)
这将为您提供开始和结束之间的秒数。
<?php
// microtime(true) returns the unix timestamp plus milliseconds as a float
$starttime = microtime(true);
/* do stuff here */
$endtime = microtime(true);
$timediff = $endtime - $starttime;
?>
要在之后显示时钟式,你可以这样做:
<?php
// pass in the number of seconds elapsed to get hours:minutes:seconds returned
function secondsToTime($s)
{
$h = floor($s / 3600);
$s -= $h * 3600;
$m = floor($s / 60);
$s -= $m * 60;
return $h.':'.sprintf('%02d', $m).':'.sprintf('%02d', $s);
}
?>
如果您不想在小数点后显示数字,只需将round($s);
添加到secondsToTime()
功能的开头。
答案 1 :(得分:20)
使用PHP >= 5.3
您可以使用DateTime
及其方法DateTime::diff()
,它会返回DateInterval
个对象:
$first = new DateTime( '11:35:20' );
$second = new DateTime( '12:00:45' );
$diff = $first->diff( $second );
echo $diff->format( '%H:%I:%S' ); // -> 00:25:25
答案 2 :(得分:7)
使用'time()'功能跟踪您的时间。 您可以稍后将'time()'转换为其他格式。
$_SESSION['start_time'] = time();
$end_time = time();
$end_time - $_SESSION['start_time'] = 65 seconds (divide by 60 to get minutes)
然后您可以将其与其他值进行比较。
如果您需要毫秒级的细节,请使用microtime。
答案 3 :(得分:0)
你可以实现所显示的解决方案,但我喜欢使用phptimer class(或其他人,这个轮已经发明了几次)。优点是您通常可以将计时器定义为活动计时器,从而允许您将计时器调用留在代码中供以后参考,而无需重新键入所有时间点。