【问题标题】:How to calculate total time in laravel如何计算laravel中的总时间
【发布时间】:2022-01-03 16:18:49
【问题描述】:

我有关于时间表的项目,我有任务表和计时器表,每个任务都有很多计时器,计时器属于任务。

我在 getTotalAttribute 中计算了 start_at 和 end_at 计时器之间的时间,我得到了它们之间的时间差。

定时器模型

class TsTimer extends Model
{
    use HasFactory;

    public $appends = ['total'];

    public $casts = [
        'start' => 'datetime',
        'end' => 'datetime',
    ];

    public function task(){
        return $this->belongsTo(TsTask::class);
    }

    public function user(){
        return $this->belongsTo(User::class);
    }

    public function getTotalAttribute(){
        // calclute the difference between two time start and end in mints.
        if($this->end){
            return $this->start->diffInMinutes($this->end);
        }     
    return 0;
    }

任务模型

class TsTask extends Model
{
    use HasFactory;

    public $appends = ['total', 'timer_total'];

    public function project(){
        return $this->belongsTo(TsProject::class);
    }

    public function timers(){
        return $this->hasMany(TsTimer::class,'task_id');
    }

    public function getTotalAttribute(){
        $format=$this->timers->sum('total');
        return date('i:s',$format);
    }

现在我需要计算这些计时器的总时间,例如第一个计时器(4 小时 - 10 分钟),第二个计时器(1 小时),总时间为 5:10。

所以我需要计算这个总数,请任何帮助或建议,我不知道如何计算它。

提前致谢

这里是关于应用程序的照片:

App overview Image

【问题讨论】:

  • 什么确切不起作用?您尝试过什么来解决问题?也许使用DateTime 或在整个应用程序中以秒为单位的差异而不是将其转换为介于两者之间的格式化字符串更容易?
  • @NicoHaase 代码有效,但我需要计算所有计时器的总时间,正如您在应用程序概览图片末尾看到的那样,我需要如何计算它的建议。
  • 你尝试过什么?你被困在哪里了?当您总结所有计时器时,究竟是什么不起作用?
  • @NicoHaase 实际上,我需要一种方法或想法来总结所有计时器,这就是我所要问的。

标签: php laravel time


【解决方案1】:

在你的任务模型中试试这个

public function getTotalAttribute(){

  $totalminutes = 0;
    foreach($this->timers->get() as $timer)
        $startTime = Carbon::parse($timer->start_time);
        $endTime = Carbon::parse($timer->end_time);
        $duration = $endTime->diffInMinutes($startTime);
        $totalminutes += $duration;
    }

    return date('H:i', mktime(0, $totalminutes));
}

【讨论】:

  • 感谢@Bhargav Rangani 的回答,但也许您没有正确理解我的问题。在我的代码中,已经在 getTotalAttribute 函数中为每个计时器计算了总分钟数,您可以在 App 概览图像和代码中看到。我的问题是如何计算一个值中所有计时器的所有总分钟数,例如总。
猜你喜欢
  • 2021-08-29
  • 2020-02-14
  • 2021-11-23
  • 2012-02-15
  • 2016-05-10
  • 2015-08-17
  • 2014-07-13
  • 2021-11-25
  • 2011-07-07
相关资源
最近更新 更多