Как мне отформатировать целое число в формат ЧЧ: ММ: СС? - PullRequest
0 голосов
/ 07 февраля 2019

Я отслеживаю общее количество времени, которое каждый сотрудник провел на работе с момента трудоустройства.

У меня есть таблица записей (Заезд / Выезд), и время рассчитывается послепроисходит извлечение.

Однако у меня есть соответствующий столбец для этого в целочисленном формате, и если FOR EXAMPLE кто-то входит в 10:53:07 и уходит в 11:18:31, он отображает 24 в результате (так как между 07 и 31 есть 24 секунды).В основном сбрасывается обратно в 0, как только достигает 60.

Изображение:

Example

Вот соответствующий код, который я использую в контроллере для суммирования:

    $employees = Employee::all();


    $totals = [];

    foreach($employees as $employee)
    {
        $totals[$employee->id] = $employee->attendances->sum('time_spent_working');
    }

Я отформатировал time_spent_working как целое число в самой миграции.Что было бы лучшим / самым чистым решением здесь?

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

использовать функцию сравнения

$startTime = "2019-01-05 23:20:25";
 $start  = new Carbon($startTime);
  $finishTime = "2019-01-06 01:20:30";
  $end    = new Carbon($finishTime);
$end->diff($start)->format('%H:%I:%S');
0 голосов
/ 08 февраля 2019

Мне удалось сделать это с помощью функции gmdate (вставил это в представление)

<td>{{ gmdate("H:i:s", $totals[$employee->id]) }}</td>

Если это поможет, я сохранил разницу во времени в SECODNS

Сконтроллер:

$attendance->time_spent_working = $attendance->checked_out_at->diffInSeconds($attendance->checked_in_at);
0 голосов
/ 07 февраля 2019

Я бы рассчитал эту разницу, когда это необходимо, используя Carbon diffForHumans функциональность вместо сохранения в базе данных.

Примерно так:

$startDate = Carbon::parse($date->entered);
$endDate = Carbon::parse($date->left);

$diff = $startDate->diffInDays($endDate);

Если вы хотитеабсолютное число вместо удобочитаемого человеком, вы можете использовать Carbons diffInSeconds, который дает количество секунд, даже если оно больше 60. Но тогда вам понадобится логика для отображения секунд / минут / часови т.д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...