Search code examples
phplaravelphp-carbon

Sum times from Array using Carbon


How can i sum times into array using Carbon?

<?php
namespace App\Models;
use Carbon\Carbon;
class Appointment extends BaseModel 
{
  public static function total_time()
  {
    $appointments = Appointment::get();
    $sumtimes = [];
    foreach($appointments as $a){
        $dti = Carbon::parse($a->dateinitial);
        $dtf = Carbon::parse($a->datefinal);
        $time = $dti->diff($dtf)->format('%H:%I:%S');
        $sumtimes[] = $time;
    }
    $sumtimes= sum($sumtimes);
    return $sumtimes;

}

inside sum_times, there is a list of times that need to be summed like:

$sum_times[0] = "00:01:18"
$sum_times[1] = "00:03:11"
$sum_times[2] = "01:01:18"
$sum_times[3] = "00:01:28"

I need it to return "01:07:15"


Solution

  • <?php
    
    public static function total_time(): string
    {
        $seconds = 0;
    
        foreach(Appointment::get() as $appointment){
            $dateinitial = Carbon::parse($appointment->dateinitial);
            $datefinal = Carbon::parse($appointment->datefinal);
            $seconds += $datefinal->diffInSeconds($dateinitial);
        }
    
        return gmdate('H:i:s', $seconds);
    }
    

    Also you must set for your fields (dateinitial, datefinal) cast datetime for automated parsing to Carbon type. Docs for date casts.