2011-10-21 77 views
21

嗨所有我试图计算在PHP中花费的时间。问题不在于php,而在于我的数学技能。例如: 时间:11:35:20(hh:mm:ss),现在说当前时间是:12:00:45(hh:mm:ss),那么我的公式中的时间差就会给出输出: 1:-34:25。它实际上应该是:25:25计算在PHP中花费的时间

$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

考虑用'mktime()'转换为时间戳,然后做简单的减法。也许在这种情况下简单地使用'time()'而不是'getdate()'是个好主意。 –

+0

,如果你使用的是逆方法?你知道用户登录的时间,然后展示一种试用吗? – JellyBelly

+0

比你所有的答复,我终于看到所有的答案与以下内容后工作: 'if($ s1 <0){ \t $ s1 + = 60; }($ s1> =(60- $ secin)){ \t $ m1--;} if($ s1> = \t} if($ m1 <0){ $ m1 * = -1; $ m1 =(60 - $ m1); $ h1--; } ' – Wilest

回答

37

这会给你开始和结束之间的秒数。

<?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()函数。

+0

您没有正确地阅读问题。他不想测量他的脚本的运行时间,而是测量任意的时间跨度。 –

+0

我知道这可能是误导性的,但是他不是在要求基准测试,而是为了计算一个简单的时间差。想一想,比如说旅行时间,或者比赛,或者类似的东西 –

+0

对不起,我可能不得不补充说,页面每秒刷新一次以显示新的经过时间,所以我必须使用上面的方法。我很抱歉没有正确解释。 – Wilest

7

使用'time()'函数记录您的时间。 您可以稍后将'time()'转换为其他格式。

$_SESSION['start_time'] = time(); 

$end_time = time(); 

$end_time - $_SESSION['start_time'] = 65 seconds (divide by 60 to get minutes) 

然后您可以将它与以后的其他值进行比较。

如果您需要毫秒的细节,请使用microtime。

+0

还要确保你签出PHP的date()函数。 [link](http://php.net/manual/en/function.date.php) – donutdan4114

20

使用PHP >= 5.3你可以使用​​及其方法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 
+1

'$ first = new DateTime($ _ SESSION ['h']。':'。$ _ SESSION ['m'] 。':'。$ _ SESSION ['s']);'用于使DateTime对象脱离给定的Session数据。 – Duroth

+0

不幸的是我使用的是PHP 5.2.6 – Wilest

0

可以实现显示的解决方案,但我喜欢用phptimer class的(或其他人,这轮已经发明了几次)。优点是通常可以将定时器定义为激活或不激活,从而允许您在代码中保留定时器调用以供日后参考,而无需重新输入所有时间点。

相关问题