[英]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.