繁体   English   中英

Laravel 使用 carbonInterval 或 carbon php 获取员工在两个日期之间工作的总时间

[英]Laravel get total time workerd by employee between two dates using carbonInterval or carbon php

我有分配给用户的时间班次。 假设夜班开始时间是 7 月 2 日晚上21-00-00 pm of one july结束时间是03-00-00 am of 2nd July 现在我想通过将开始时间添加到结束时间(等于6 hours )来获得员工工作的总时间,我应该得到 6 小时。 我尝试了以下代码,该代码在current date工作正常,如果开始时间等于15-00-00 pm of 1 july月 1 日的21-00-00 pm of 1 july 7 月 1 日的 21-00-00 pm,它将给我准确的6 hours ,但它会失败如上所述,两个日期之间存在轮班。

    $attendance_start_time = \Carbon\Carbon::parse($shift->start_time);

   $attendance_end_time = \Carbon\Carbon::parse($shift->end_time);

   $total_attendance_time=$attendance_end_time->diffInSeconds($attendance_start_time,true);

   \Carbon\CarbonInterval::seconds($total_attendance_time)->cascade()->forHumans()

我期待六个小时,但它给了我以下结果

18 hours

我想要确切的six小时

不确定它是否会完全解决您的问题,但请查看以下内容:

\Carbon\CarbonInterval::seconds(4100)->cascade()->forHumans(['aUnit' => true]);

UPD:这个解决方案可能适用于您的情况,但请确保您已经测试了所有边缘情况:

    $startTime = \Carbon\Carbon::parse('2022-07-02 19:00');

    $endTime = \Carbon\Carbon::parse('2022-07-02 19:30');

    $diff = $startTime->diffInSeconds($endTime);

    if ($endTime->greaterThanOrEqualTo($endTime) && ! $endTime->isSameDay($startTime)) {
        $diff = $startTime->diffInSeconds($endTime->addDay());
    }

    $humanReadable = \Carbon\CarbonInterval::seconds($diff)->cascade()->forHumans(['aUnit' => true]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM