Laravel碳时间差

Laravel Carbon difference in time

所以我有这个 table 有开始时间和结束时间,我正在计算小时数。 这工作得很好,除非结束时间是午夜。

我的数据库中有用于开始和结束的 TIME 字段。

这是计算

      @php 
        $start = \Carbon\Carbon::parse($person->clocked_in_at);
        $end = \Carbon\Carbon::parse($person->clocked_out_at);
        $diff = $start->diff($end)->format('%H:%I');
      @endphp

如果开始时间为 07:30:00,结束时间为 13:00:00,则正确计算为 05:30 小时。但是,如果开始时间为 23:30:00,结束时间为 00:00:00,应该计算为 30 分钟,则计算为 23:30:00

我在这里错过了什么?

你需要添加这个year-month-day

像这样:

    $start = \Carbon\Carbon::parse('2015-5-5 23:30:00');
    $end = \Carbon\Carbon::parse('2015-5-6 00:00:00');
    $diff = $start->diff($end)->format('%H:%I');

注意:这一天从 00:00:00

开始

希望对你有帮助

如果 clocked_out 小于 clocked-in,那么您需要考虑日期更改。

      @php 
        $start = \Carbon\Carbon::parse($person->clocked_in_at);
        $end = \Carbon\Carbon::parse($person->clocked_out_at);

        @php
          if($end->lt($start) {
             $end->addDay();
          }
        @endphp

        $diff = $start->diff($end)->format('%H:%I');
      @endphp

这也适用于其他 cross-midnight 班次,而不仅仅是那些恰好在午夜结束的班次

Blade 视图不是进行此计算的地方。