Лучший способ подвести итог времени в Ларавеле? - PullRequest
0 голосов
/ 03 июля 2019

У меня есть таблица с именем транзакции с двумя соответствующими полями для моего вопроса, _start_timestamp_ и _end_timestamp_.Мне нужно суммировать время, прошедшее между всеми транзакциями, где _end_timestamp_ не равно нулю.Таким образом, результат должен быть примерно таким: Общее время транзакций: 1 час 18 минут

Я пытался использовать Углерод , но я не знаю, каксуммировать все строки таблицы, используя его.

foreach($timestampStarts as $timestampStart){  
    $time = new Carbon($timestampStart->start_timestamp);
    $shift_end_time =new Carbon($timestampStart->end_timestamp);
    dd($time->diffForHumans($shift_end_time));
}

Ответы [ 2 ]

1 голос
/ 03 июля 2019

Вам нужно получить общую разницу в минутах. Добавьте общую разницу и получите разницу для людей. Вы можете получить, как показано ниже:

$diffForHumans = null;
$nowDate = Carbon::now();
$diffInMinutes = 0;

foreach($timestampStarts as $timestampStart){  

    if(!empty($timestampStart->end_timestamp)){ // if the end timestamp is not empty

        $time = new Carbon($timestampStart->start_timestamp);
        $shift_end_time =new Carbon($timestampStart->end_timestamp);

        //Adding difference in minutes
        $diffInMinutes+= $shift_end_time->diffInMinutes($time);
    }
}
$totalDiffForHumans = $now->addMinutes($diffInMinutes)->diffForHumans();
1 голос
/ 03 июля 2019

Вы можете использовать функцию MySQL TIMESTAMPDIFF для вычисления разницы:

Transaction::whereNotNull('_end_timestamp_')
    ->sum(DB::raw('TIMESTAMPDIFF(SECOND, _start_timestamp_, _end_timestamp_)'));

Это даст вам общее количество в секундах.

...