【问题标题】:Laravel - Calculating total time for multiple time-entriesLaravel - 计算多个时间条目的总时间
【发布时间】:2020-02-14 12:27:55
【问题描述】:

我正在记录用户时间条目。我的时间迁移看起来像:

  Schema::create('times', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedBigInteger('user_id');
            $table->date('start_day');
            $table->text('category');
            $table->time('start_time');
            $table->time('finish_time');
            $table->time('duration');
            $table->text('notes');
            $table->timestamps();

            $table->foreign('user_id')->references('id')->on('users');

        });
    }

注意:持续时间计算 start_time 和 finish_time 之间的总差

我将月份和类别与以下代码组合在一起:

   $data = $user->times()->whereYear('start_day', 2019)->get();
        $group_months = $data->groupBy(function($entry) {
            return $entry->category;
        })->map(function($items) {
            return $items->groupBy(function($entry) {
                return Carbon::parse($entry->start_day)->format('m');
            })
        ->map(function($items) {
            return $items->count();
            });
        });

如果我运行 dd($group_months) 我会得到:

Collection {#322 ▼
  #items: array:1 [▼
    "Comp Time Used" => Collection {#318 ▼
      #items: array:1 [▼
        10 => 2
      ]
    }
  ]
}

如您所见,它按类别和月份对其进行分组,并计算条目总数。

我现在想获取每个月的总时长及其对应的类别。

例如,如果我们引用上面的集合,我有: Comp Time Used 下 2 个 10 月份的时间条目。

比方说,时间条目 1 持续时间 = 12:00:00,时间条目 2 持续时间 = 05:00:00

我希望显示总时长:17:00:00。我该怎么做?

【问题讨论】:

  • 我回答了你的其他问题。你看到我的回答了吗?stackoverflow.com/a/58435270/9396711
  • 我没看到,我的错。我会把它放在我的 Time.php 模型中吗?
  • 尝试在您的控制器中调用此代码。
  • 给我一个 SQL 语法/版本错误

标签: php mysql laravel collections eloquent


【解决方案1】:

我更正并检查了我之前的答案。

$monthDurations = $user->times()
    ->whereYear('start_day', 2019)
    ->select(
        \DB::raw('TIME_FORMAT(SUM(TIME_TO_SEC(duration)), "%H:%i:%s") as `month_duration`'),
        \DB::raw('DATE_FORMAT(start_day, "%Y-%m") as `year_month`'),
        'category',
        'user_id'
    )
    ->groupBy(\DB::raw('DATE_FORMAT(start_day, "%Y-%m")'), 'category', 'user_id')
    ->get();

【讨论】:

  • 谢谢,是的,我只需要将秒时间转换成如下格式:39600 秒 = 11,因为 39600 = 11:00:00。任何想法如何做到这一点?
  • 我改变了答案。检查一下。
猜你喜欢
  • 2017-06-06
  • 1970-01-01
  • 2022-01-03
  • 2017-01-08
  • 1970-01-01
  • 2018-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多