我有一个PHP函数,当给定两个值Hours / Minutes时,它将两个值相加,例如:
00:20 + 00:15 = 00:35
功能如下:
function sumHoursAndMinutes() {
$i = 0;
foreach(func_get_args() as $time) {
sscanf($time, '%d:%d', $hour, $min);
$i += $hour * 60 + $min;
}
if( $h = floor($i / 60) ) {
$i %= 60;
}
return sprintf('%02d:%02d', $h, $i);
}
// Usage: sumHoursAndMinutes("00:20", "00:15");
输出:“ 00:35”
如何通过减法实现相同的结果,例如:00:20-00:15 = 00:05
答案 0 :(得分:1)
这可能看起来很长,但是我个人只是将其转换为分钟。这使它更易于处理,我将重新格式化方法用于以下目的:如果您的substractTimeFromTime
或addTimeToTime
返回了<0
,则您输入的内容有问题或仅仅是在您的上下文中没有任何意义。另外,您需要验证时间是否有效,因为01:99
到现在是有效输入。我只是假设您之前进行过验证。
function reformatMinutes($minutes)
{
$hours = intval($minutes/60);
$minutes -= $hours*60;
return sprintf("%02d:%02d",$hours,$minutes);
}
function addTimeToTime($time1, $time2)
{
$time1 = explode(":",$time1);
$time2 = explode(":",$time2);
$sumOfMinutes = intval($time1[0])*60+intval($time2[0])*60+intval($time1[1])+intval($time2[1]);
return $sumOfMinutes;
}
function substractTimeFromTime($basis,$subtract)
{
$basis = explode(":",$basis);
$subtract = explode(":",$subtract);
$remainingMinutes = intval($basis[0])*60-intval($subtract[0])*60+intval($basis[1])-intval($subtract[1]);
return $remainingMinutes;
}
$resultPlus = addTimeToTime("01:10","00:15");
$resultMinus = substractTimeFromTime("01:30","00:15");
echo reformatMinutes($resultPlus);
echo reformatMinutes($resultMinus);
这将输出:
01:25
01:15
答案 1 :(得分:0)
要么为减号编写几乎相同的函数,而不是加号,要么添加默认为加号但可以设置为减号的可选布尔参数。
答案 2 :(得分:0)
您可以使用date()和strtotime()。
请记住,之后请再次将时区设置回默认值。
我们需要UTC时区,而不必担心DST或时区差异。
$a = "00:20";
$b = "00:15";
date_default_timezone_set("UTC");
echo date("H:i", strtotime($a) + strtotime($b));
echo "\n\n";
echo date("H:i", strtotime($a) - strtotime($b));
date_default_timezone_set("Your_default_timezone");
//00:35
//00:05
如果您需要从strtotime手动计算小时和分钟。
如果要添加,则需要从结果中删除strtotime(“ 00:00”)* 2,因为我们使用的是Unix时间。
然后,我使用str_pad格式化小时和分钟。
$a = "00:20";
$b = "02:15";
date_default_timezone_set("UTC");
// If addition
$diff = strtotime($a) + strtotime($b) - strtotime("00:00")*2;
$hours = floor($diff /3600);
$minutes = ($diff -($hours *3600))/60;
echo str_pad($hours,2,0, STR_PAD_LEFT) . ":" . str_pad($minutes,2,0, STR_PAD_LEFT) ;
echo "\n\n";
//If subtraction
$diff = strtotime($a) - strtotime($b);
$hours = floor($diff /3600);
$minutes = ($diff -($hours *3600))/60;
echo str_pad($hours,2,0, STR_PAD_LEFT) . ":" . str_pad($minutes,2,0, STR_PAD_LEFT) ;
//date_default_timezone_set("Your_default_timezone");
//02:35
//-2:05