【问题标题】:How to sum time in array?如何对数组中的时间求和?
【发布时间】:2015-09-18 01:16:15
【问题描述】:

我有一个数组。我想对数组中的所有时间求和,因此它将导致数组中所有时间的总和。 :

//print_r($chart_average);
Array ( [0] => 00:20:00 [1] => 00:03:45 [2])

如何在上面的数组中一直求和并显示如下结果。如何计算所有数组?

总时间:00:23:45

在此之后我的答案供我参考:

 foreach ($chart_average as $time) {
        list($hour, $minute, $second) = explode(':', $time);
        $all_seconds += $hour * 3600;
        $all_seconds += $minute * 60;
        $all_seconds += $second;

    }

   $total_minutes = floor($all_seconds/60);
   $seconds = $all_seconds % 60;
   $hours = floor($total_minutes / 60); 
   $minutes = $total_minutes % 60;

    // returns the time already formatted
    echo sprintf('%02d:%02d:%02d', $hours, $minutes,$seconds);

【问题讨论】:

  • 是的.. 但它只有一分钟
  • 那是小时和分钟。
  • 是的,但我已经在数组中有 H:M:ss .. 我使用 array_sum 但不起作用
  • 代码有效,但我第二次遇到问题..

标签: php arrays function


【解决方案1】:
$times = array();

$times[] = "12:59";
$times[] = "0:58";
$times[] = "0:02";

// pass the array to the function
echo AddPlayTime($times);

function AddPlayTime($times) {

    // loop throught all the times
    foreach ($times as $time) {
        list($hour, $minute, $second) = explode(':', $time);
        $all_seconds += $hour * 3600;
        $all_seconds += $minute * 60; $all_seconds += $second;

    }


    $total_minutes = floor($all_seconds/60); $seconds = $all_seconds % 60;  $hours = floor($total_minutes / 60); $minutes = $total_minutes % 60;

    // returns the time already formatted
    return sprintf('%02d:%02d:%02d', $hours, $minutes,$seconds);
}

【讨论】:

  • 我得到了这个:01:103:45 ...假设:01:43:45
  • 是的,抱歉,我更改了这一行:$total_minutes = floor($all_seconds/60); $seconds = $all_seconds % 60; $hours = floor($total_minutes / 60); $minutes = %total_minutes % 60;
  • 是的,现在你的代码是正确的.. 但是有一点错误..%total_minutes % 60;假设 $total_minutes % 60;.. 谢谢..
  • cool.....这将是我之后的参考。我将更多地使用它来制作图表..谢谢
【解决方案2】:

有点丑,但它有效

$a = array('00:20:00', '00:03:45');
$h = $m = $s = 0;
foreach ($a as $time) {
    $time = new \DateTime($time);
    $h += $time->format('H');
    $m += $time->format('i');
    $s += $time->format('s');
}

$interval = new DateInterval("PT{$h}H{$m}M{$s}S");
echo $interval->format('%H:%I:%S');

【讨论】:

  • 我得到了这个:01:103:45 ...假设:01:43:45
  • 我得到 00:23:45 所以你能仔细检查你在正确的地方发表评论吗??
【解决方案3】:

试试这个..

$time = "00:58:50";
$time2 = "00:02:30";

$secs = strtotime($time2) - strtotime("00:00:00");
$result = date("H:i:s", strtotime($time) + $secs);
// 01:01:20

【讨论】:

    猜你喜欢
    • 2019-06-16
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多