How to sum N number of time (HH:MM Format)?

后端 未结 5 1189
独厮守ぢ
独厮守ぢ 2020-11-27 21:43

I am using the following sample code to calculate sum of two different time values. Now I want to get the sum of N number of time values.

// numbers for test         


        
相关标签:
5条回答
  • 2020-11-27 22:14

    This is the best way:

    <?php
    
        function CalculateTime($times) {
            $i = 0;
            foreach ($times 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);
        }
    
        $date[] = '02:32';
        $date[] = '01:29';
        echo CalculateTime($date);
    
    ?>
    
    0 讨论(0)
  • 2020-11-27 22:17

    Here is an function that will sum all your time values in format HH:MM:

    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);
    }
    
    // use example
    echo sum_time('01:05', '00:02', '05:59'); # 07:06
    

    demo

    0 讨论(0)
  • 2020-11-27 22:17

    Laravel Framework (PHP language)

         $chores = ChoresTime::where('family_id', $family->id)->get();
            $total = [];
            foreach ($chores as $key => $value) {
                $total[] = $value->time;
            }
          $total = CalculateTime($chores);
          return response()->json([
              'status' => 1, 
              'message' => 'Total Time', 
              'data' => [], 
              'total' => $total 
          ], ok());
    

    Answer:

    {
        "status": 1,
        "message": "Family Total Chores Time",
        "data": [],
        "total": "14:22"
    }
    
    0 讨论(0)
  • 2020-11-27 22:25

    this should do what you are looking for:

    $times is the array of times and you can add how many time you want

    $times = array();
    
    $times[] = "12:59";
    $times[] = "0:58";
    $times[] = "0:02";
    
    // pass the array to the function
    echo AddPlayTime($times);
    
    function AddPlayTime($times) {
        $minutes = 0; //declare minutes either it gives Notice: Undefined variable
        // loop throught all the times
        foreach ($times as $time) {
            list($hour, $minute) = explode(':', $time);
            $minutes += $hour * 60;
            $minutes += $minute;
        }
    
        $hours = floor($minutes / 60);
        $minutes -= $hours * 60;
    
        // returns the time already formatted
        return sprintf('%02d:%02d', $hours, $minutes);
    }
    

    EDIT

    I edited the code with the right names of the variables. It is more correct now.

    hope this helps :-)

    0 讨论(0)
  • 2020-11-27 22:35
    function sumarHoras($acumuladoTime, $nuevoTime){
    
        //Se esperan parametros así:
        //$acumuladoTime="02:45";
        //$nuevoTime="04:36";
        //echo "Hora acumulada: $acumuladoTime"."<br>";
        //echo "Nuevo tiempo acumulado: $nuevoTime"."<br>";
    
        /*Tiempo acumulado*/
        $myArrayAcumuladoTime=explode(":", $acumuladoTime);
    
        $hrsAcumuladoTime=$myArrayAcumuladoTime[0];
        $minsAcumuladoTime=$myArrayAcumuladoTime[1];
    
        /*Nuevo Time*/
        $myArrayNewTime=explode(":", $nuevoTime);
    
        $hraNewTime=$myArrayNewTime[0];
        $minNewTime=$myArrayNewTime[1];
    
        /*Calculo*/
        $sumHrs=$hrsAcumuladoTime+$hraNewTime;
        $sumMins=$minsAcumuladoTime+$minNewTime;
    
        /*Si se pasan los MINUTOS*/
        if($sumMins>59){
          /*Quitamos hora para dejarlo en minutos y se la sumamos a la de horas*/
          $sumMins-=60;
          $sumHrs+=1;
        }
    
        // echo "Total hrs agregadas: $sumHrs:$sumMins"."<br>";
        return "$sumHrs:$sumMins";
      }
    
    0 讨论(0)
提交回复
热议问题