PHP:计算两次之间的持续时间
好的,一个非常简单的问题,但我太笨了,想不出来。我想得到两次之间的差异。例如,“1:07”(1分7秒)和“3:01”(3分1秒)。它只会持续几分钟和几秒钟。我一直在努力利用这一点: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
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:54strotime函数用于将字符串格式的日期转换为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));