【问题标题】:How do I format an integer into a HH:MM:SS format?如何将整数格式化为 HH:MM:SS 格式?
【发布时间】:2019-07-01 06:33:45
【问题描述】:

我正在跟踪每位员工从入职那一刻起在工作上花费的总时间。

我有条目表(签入/签出),并且在签出发生后计算时间。

但是,我有整数格式的相关列,如果有人在 10:53:07 进入并在 11:18:31 离开,则显示 24 结果(因为 07 和 31 之间有 24 秒)。一旦达到60,基本上会重置回0。

图片:

这是我在控制器中用于求和的相关代码:

    $employees = Employee::all();


    $totals = [];

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

我在迁移本身中将 time_spent_working 格式化为整数。这里最好/最干净的解决方案是什么?

【问题讨论】:

标签: php laravel eloquent


【解决方案1】:

我设法通过 gmdate 函数来做到这一点(将其插入到视图中)

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

如果有帮助,我会及时将差异存储在 SECODNS 中

来自控制器:

$attendance->time_spent_working = $attendance->checked_out_at->diffInSeconds($attendance->checked_in_at);

【讨论】:

    【解决方案2】:

    使用差异函数

    $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');
    

    【讨论】:

    • 给我一个错误:调用 int 上的成员函数 format()
    • 带你开始日期和结束日期,并把它传递给如图所示的函数。
    【解决方案3】:

    我会在需要时使用Carbon diffForHumans functionality 计算此差异,而不是将其保存在数据库中。

    像这样

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

    如果你想要一个绝对数字,而不是人类可读的数字,你可以使用 Carbons diffInSeconds 给出秒数,即使它超过 60。但是你必须有一些逻辑显示秒/分钟/小时等。

    【讨论】:

      猜你喜欢
      • 2014-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      • 2011-10-28
      • 2012-10-22
      • 2021-10-04
      相关资源
      最近更新 更多