我想要3次不同的时间。
前:
h1 = "04:23";
h2 = "04:16";
h3 = "00:00";
所以答案应该是$hours = "08:39"
我已经搜索了这个并得到了很多解决方案但没有得到正确答案。
这是我的代码:
$hours = strtotime($h1) + strtotime($h2) + strtotime($h3);
$total_hours = date("H:i", intval($hours));
echo $total_hours;
"00:00"
是上面代码的答案。我不想使用任何可以添加时间的用户定义函数。有人可以帮帮我吗?
答案 0 :(得分:4)
您需要总时间和小时,因此无需使用strtotime或date()方法。 此解决方案没有任何内置方法。 我总是使用这个解决方案。
解决方案的工作演示:https://eval.in/98249
function sum_time() {
$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);
}
echo sum_time('04:23', '04:16', '00:00');
答案 1 :(得分:0)
如果您不想使用用户定义的逻辑,您唯一的选择是根据我的意见使用strtotime
的内置函数。但是您需要为strtotime
函数提供正确的格式,例如00:04:16
。我已经提供了我的逻辑来为您提供解决方案。
$h1 = "04:23";
$h2 = "04:16";
$h3 = "00:00";
$h_arr = array($h1, $h2, $h3);
function sum_time($h_arr) {
$hours = 0;
$minutes = 0;
foreach($h_arr as $value) {
$value_explode = explode(':', $value);
$hours += $value_explode[0];
$minutes += $value_explode[1];
if($minutes > 60) {
$hours += 1;
$minutes = $minutes % 60;
}
}
return sprintf('%02d:%02d', $hours, $minutes);
}
echo sum_time($h_arr);
Bhavin 提供的逻辑也很好。如果你对它感到满意,你可以去做。它取决于你。
<强>演示强>
使用您的测试用例 - https://eval.in/703528
其他测试用例 - https://eval.in/703529
答案 2 :(得分:0)
Bhavin和Perumal93回答工作正常。但我正在以不同的方式思考。我想尽可能简单地做到这一点。代码如下所示:
<?php
/**
* @param array $times
* @return string
*/
function sumOfDiffrentTime($times = array())
{
$minutes = '';
// loop through all the times array
foreach ($times as $time) {
list($hour, $minute) = explode(':', $time);
$minutes += $hour * 60;
$minutes += $minute;
}
$hours = floor($minutes / 60);
$minutes -= $hours * 60;
// returns the formatted time
return sprintf('%02d:%02d', $hours, $minutes);
}
$times = array();
$times[] = "04:23";
$times[] = "04:16";
$times[] = "00:00";
// pass your $times array to the function
echo sumOfDiffrentTime($times);
希望它会对你有所帮助。