计算php中的已用时间

Wil*_*est 26 php time

大家好我正在尝试计算php中的已用时间.问题不在于php,而在于我的数学技能.例如:Time In: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;
Run Code Online (Sandbox Code Playgroud)

有什么帮助吗?

编辑

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

Cro*_*tab 51

这将为您提供开始和结束之间的秒数.

<?php

// microtime(true) returns the unix timestamp plus milliseconds as a float
$starttime = microtime(true);
/* do stuff here */
$endtime = microtime(true);
$timediff = $endtime - $starttime;

?>
Run Code Online (Sandbox Code Playgroud)

要在之后显示时钟式,你可以这样做:

<?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);
}

?>
Run Code Online (Sandbox Code Playgroud)

如果您不想显示小数点后的数字,只需添加round($s);secondsToTime()函数的开头即可.

  • 这会稍微改变我的答案,尽管其他建议会支持将您想要比较的时间存储为DateTime对象或UNIX时间戳的想法.在同一单元中完成所有工作(在这种情况下为秒),然后转换回更适合显示的时间. (2认同)

Dec*_*ler 21

使用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
Run Code Online (Sandbox Code Playgroud)


don*_*114 7

使用'time()'功能跟踪您的时间.您可以稍后将'time()'转换为其他格式.

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

$end_time = time();

$end_time - $_SESSION['start_time'] = 65 seconds (divide by 60 to get minutes)
Run Code Online (Sandbox Code Playgroud)

然后您可以将其与其他值进行比较.

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