PHP:两次之间的持续时间

时间:2009-02-10 21:50:10

标签: php

好的,一个非常简单的问题,但我太厚了,无法弄明白。我希望两次得到区别。例如,“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

谢谢大家,我从这一个帖子中学到了很多东西,特别是。保罗的。它运作得很好,我喜欢防守!

5 个答案:

答案 0 :(得分:13)

你不能使用strtotime,因为它会将MM:SS解释为HH:MM - 这就是为什么你获得的值高于预期值。

你可以简单地在你的MM:SS值前加上'00:',使它们看起来像HH:MM:SS。

但请注意,strtotime,如果只给出HH:MM:SS,将为今天提供时间戳,这对于一次性代码来说很好。不要将这种技术用于任何重要的事情,考虑一下,如果你的两次调用strtotime跨越午夜会发生什么!

或者,类似这样的东西会将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;
    }
}

它比使用爆炸更具防御性,但显示了另一种方法!

答案 1 :(得分:6)

这应该可以给你两次的差异。

$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;

答案 2 :(得分:3)

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

<?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

答案 3 :(得分:3)

strtotime函数用于将字符串格式的日期(下至第二个)转换为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');

答案 4 :(得分:0)

$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));