Суммировать разницу временных меток за месяц

хочу суммировать ежедневные рабочие часы пользователя, и у меня есть время для проверки и проверки в столбце времени

$sql=" SELECT User_id, date, min(time) AS checkedin, max(time) AS checkedout,( (TIME_TO_SEC(TIMEDIFF(max(time), min(time))) / 60) / 60) difference
            FROM profile WHERE 1 GROUP BY User_id, date";
            $previousdata = DB::select($sql);

я получаю этот массив из SQL-запроса, который я использовал, и я хочу добавить разницу, которую я получаю каждый день для данных за месяц. не беспокойтесь о формате даты, я из Непала и использую непальскую дату.

Array
(
    [0] => stdClass Object
        (
            [User_id] => 1
            [date] => 2076-02-06
            [checkedin] => 12:11:40
            [checkedout] => 19:11:43
            [difference] => 7.00083333
        )

    [1] => stdClass Object
        (
            [User_id] => 1
            [date] => 2076-02-08
            [checkedin] => 12:15:40
            [checkedout] => 15:15:48
            [difference] => 3.00222222
        )

)
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Что нового в PHP 8.1?
Что нового в PHP 8.1?
Если вы все еще используете PHP 7, то эта статья для вас. В PHP 8, а именно в PHP 8.1, встроены некоторые очень востребованные функции, которые вам...
Разработка LMS на заказ для повышения эффективности работы и обучения
Разработка LMS на заказ для повышения эффективности работы и обучения
За последние годы в образовании произошла большая революция, и сегодня почти все учебные заведения делают упор на эксклюзивное управление учебным...
1
0
31
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать

array_sum(array_column($arr,'difference'));

Чтобы получить общее количество рабочих часов.

рабочий демо.

использовал это и работал нормально $wsum=0; foreach($previousdata as $key=>$value){ $dbresponse[$value->difference] = !empty($value->sum)?$value->sum:0; $wsum += $value->difference; }

Suyesh Bhatta 22.05.2019 12:04
Рад помочь и добро пожаловать в Stack Overflow. Если этот ответ решил вашу проблему, нажмите на галочку рядом с ответом, чтобы переключить его с серого на заполненный.
Rahul 22.05.2019 12:05

Если вы хотите сделать это с помощью запроса, используйте rollup

SELECT User_id, date, min(time) AS checkedin, max(time) AS checkedout,( (TIME_TO_SEC(TIMEDIFF(max(time), min(time))) / 60) / 60) difference
FROM profile WHERE 1 GROUP BY User_id, date WITH ROLLUP";

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

Спасибо всем за помощь

Suyesh Bhatta 23.05.2019 16:21

Другие вопросы по теме