为了计算工作时间,我需要分别计算用户在工作时间内(09:00 - 17:00)和工作时间外(加班)的工作时间,并返回它们的总和。
例如,用户工作时间为2023-01-23 15:00至2023-01-23 22:00,其中2023-01-23 15:00至2023-01-23 17:00为工作时间,2023-01-23 17:00至2023-01-23 22:00为加班时间。
现在,我如何才能知道用户的工作时间有多少是在9:00到17:00范围内,有多少是在时间之外?
foreach ($timeSheets as $key => $time) {
if ($time->is_in == 1) {
$time_in = new Carbon($time->event_at);
$time_out = new Carbon($timeSheets[$key + 1]->event_at);
[$time_in, $time_out] = $this->getTimeZoneName($bill->BillingRateTimezone->timezone, $time_in, $time_out);
// period of his/her work time
$start_time = $time_in->format("H:i");
$end_time = $time_out->format("H:i");
// How can I calculate how much of user work time is between 9:00-17:00 and how much is outside of this ??
$sumOfInside = "?";
$sumOfOutside = "?";
}
}
2条答案
按热度按时间2lpgd9681#
可能有更好的方法来绕过它,但是一堆条件语句来覆盖每种情况也是可行的。
案例一:
案例二:
案例三:
案例四:
案例五:
案例六:
使用
Carbon
的diff方法对此非常有用,但是由于需要日期时间,Carbon::today()
(或者如果您想使用laravel助手,则只需today()
)可以给予我们提供时间为00:00:00的日期,这非常适合我们的需求。至于获得总和,我们可以递增地添加到CarbonInterval
的几个示例中。然后,您可以使用
forHumans()
方法打印出时间间隔,或者获得总小时数和分钟数。f4t66c6m2#
可以使用https://github.com/kylekatarnls/business-time
例如,使用diffInBusinessMinutes方法,您可以获得分钟数,而使用CarbondiffInMinutes方法,您可以获得总数,因此分钟数是从总数中减去的第一个。