PHP:计算两次之间的持续时间

PHP:计算两次之间的持续时间,php,Php,好的,一个非常简单的问题,但我太笨了,想不出来。我想得到两次之间的差异。例如,“1:07”(1分7秒)和“3:01”(3分1秒)。它只会持续几分钟和几秒钟。我一直在努力利用这一点: function timeDiff($firstTime,$lastTime) { // convert to unix timestamps $firstTime=strtotime($firstTime); $lastTime=strtotime($lastTime); // perform subtract

好的,一个非常简单的问题,但我太笨了,想不出来。我想得到两次之间的差异。例如,“1:07”(1分7秒)和“3:01”(3分1秒)。它只会持续几分钟和几秒钟。我一直在努力利用这一点:

function timeDiff($firstTime,$lastTime)
{

// convert to unix timestamps
$firstTime=strtotime($firstTime);
$lastTime=strtotime($lastTime);

// perform subtraction to get the difference (in seconds) between times
$timeDiff=$lastTime-$firstTime;

// return the difference
return $timeDiff;
}
但我认为我在往错误的方向跑

谢谢你的帮助

编辑 我试过:echo timeDiff('1:07','2:30')

我得到了这个输出“4980”

上面是什么?是秒吗?我不知道怎么把它写成“1:23”,这就是区别

编辑2
谢谢大家,我从这一条线中学到了很多,特别是保罗的。它工作得很好,我喜欢防守

这将以秒为单位显示两次之间的差异

$firstTime = '1:07';
$secondTime = '3:01';

list($firstMinutes, $firstSeconds) = explode(':', $firstTime);
list($secondMinutes, $secondSeconds) = explode(':', $secondTime);

$firstSeconds += ($firstMinutes * 60);
$secondSeconds += ($secondMinutes * 60);
$difference = $secondSeconds - $firstSeconds;

您不能使用strotime,因为它会将MM:SS解释为HH:MM——这就是为什么您会得到比预期更高的值

您可以简单地在MM:SS值前面加上“00:”使它们看起来像HH:MM:SS

但是请注意,如果只给出HH:MM:SS,strotime将为今天的提供一个时间戳,这对于一次性代码很好。不要用这项技术来做任何重要的事情,想想如果你两个电话都是在午夜的时候发生了什么?p> 或者,类似这样的操作会将MM:SS值转换为可以进行算术运算的时间戳

function MinSecToSeconds($minsec)
{
    if (preg_match('/^(\d+):(\d+)$/', $minsec, $matches))
    {
        return $matches[1]*60 + $matches[2];
    }
    else
    {
        trigger_error("MinSecToSeconds: Bad time format $minsec", E_USER_ERROR);
        return 0;
    }
}
它比使用explode更具防御性,但展示了另一种方法

使用找到的代码,自己计算秒数如何:

<?php

function time_to_sec($time) {
    $hours = substr($time, 0, -6);
    $minutes = substr($time, -5, 2);
    $seconds = substr($time, -2);

    return $hours * 3600 + $minutes * 60 + $seconds;
}

function sec_to_time($seconds) {
    $hours = floor($seconds / 3600);
    $minutes = floor($seconds % 3600 / 60);
    $seconds = $seconds % 60;

    return sprintf("%d:%02d:%02d", $hours, $minutes, $seconds);
} 


function timeDiff($firstTime,$lastTime)
{

// convert to seconds
$firstTime=time_to_sec($firstTime);
$lastTime=time_to_sec($lastTime);

// perform subtraction to get the difference (in seconds) between times
$timeDiff=$lastTime-$firstTime;

// return the difference
return sec_to_time($timeDiff);
}

echo timeDiff("1:07", "3:01");


?>


返回0:01:54

strotime函数用于将字符串格式的日期转换为Unix时间戳样式的格式。它不用于将时间格式的字符串转换为任何内容。看看这两种状态是否有助于你的理解

//recent php5 for DATE_RFC822
echo date(DATE_RFC822,strtotime('1:07'));
echo date(DATE_RFC822,strtotime('3:01'));   
听起来你想要这样的东西

function timeDiff($firstTime,$lastTime)
{
    //split minutes and seconds
    list($min_one, $sec_one) = preg_split('{:}',$firstTime,2, PREG_SPLIT_NO_EMPTY);
    list($min_two, $sec_two) = preg_split('{:}',$lastTime ,2, PREG_SPLIT_NO_EMPTY);

    //convert times into seconds
    $time_one = $min_one * 60 + $sec_one;
    $time_two = $min_two * 60 + $sec_two;

    //return times
    return $time_two - $time_one;
}

echo timeDiff('1:07','3:10');

非常感谢。工作完美。如果将来有人需要它,也许您应该为if函数添加一个额外的右括号。:)
$time1 = date("H:i",strtotime($strtime));
$time2 = date("H:i");
list($hours, $minutes) = explode(':', $time1);
$startTimestamp = mktime($hours, $minutes);

list($hours, $minutes) = explode(':', $time2);
$endTimestamp = mktime($hours, $minutes);

$seconds = $endTimestamp - $startTimestamp;
$minutes = ($seconds / 60) % 60;
$hours = floor($seconds / (60 * 60));