【问题标题】:Calculate elapsed time in php在php中计算经过的时间
【发布时间】:2011-12-12 14:38:49
【问题描述】:

大家好,我正在尝试在 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;

有什么帮助吗?

编辑

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

【问题讨论】:

  • 考虑用mktime() 转换成时间戳,然后做简单的减法。在这种情况下,使用 time() 而不是 getdate() 可能是个好主意。
  • 如果您使用的是逆向方法?您知道用户登录然后显示某种试用的时间吗?
  • 谢谢大家的回复,在查看了以下所有答案后,我终于让它工作了:` if($s1=(60-$secin)) { $m1--; } if($m1

标签: php time


【解决方案1】:

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

<?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() 函数的开头即可。

【讨论】:

  • 您没有正确阅读问题。他不想衡量他的脚本的运行时间,而是一个任意的时间跨度。
  • 我知道这可能会产生误导,但恕我直言,他不是要求进行基准测试,而是计算一个简单的时差。想想,比方说,一个旅行时间,或者一场比赛,或者类似的事情
  • 对不起,我可能不得不添加页面每秒刷新一次以显示新的经过时间,所以我必须使用上面的方法。我很抱歉没有正确解释。
  • 这会稍微改变我的答案,尽管其他建议会支持将您想要比较的时间存储为 DateTime 对象或 UNIX 时间戳的想法。在同一单位(在本例中为秒)完成所有工作,然后转换回更适合显示的时间。
  • 我建议使用更好的模数块,在 php 手册上发布的一个是我更喜欢复制的一个:php.net/manual/en/function.time.php#108581
【解决方案2】:

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

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

$end_time = time();

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

然后您可以稍后将其与另一个值进行比较。

如果您需要毫秒详细信息,请使用微时间。

【讨论】:

  • 还要确保检查 PHP date() 函数。 link
【解决方案3】:

使用PHP &gt;= 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

【讨论】:

  • $first = new DateTime($_SESSION['h'].':'.$_SESSION['m'].':'.$_SESSION['s']); 用于从给定的 Session 数据中创建一个 DateTime 对象。
  • 不幸的是我使用的是 php 5.2.6
  • 完美的解决方案让我跟踪一个函数需要多长时间执行。谢谢!
【解决方案4】:

您可以实施所示的解决方案,但我喜欢使用phptimer class(或其他人,这个轮子已经发明了几次)。优点是您通常可以定义计时器是否处于活动状态,从而允许您将计时器调用留在代码中以供以后参考,而无需重新键入所有时间点。

【讨论】:

    【解决方案5】:

    对于高分辨率时间,请尝试使用单调时钟:hrtime

    <?php
    $time = -hrtime(true);
    sleep(5);
    $end = sprintf('%f', $time += hrtime(true));
    ?>
    

    Difference between CLOCK_REALTIME and CLOCK_MONOTONIC?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      • 2020-12-01
      相关资源
      最近更新 更多