计算工作时间

9 浏览
0 Comments

计算工作时间

我正在尝试计算考虑到假期和工作起止时间的两个日期之间的时间差。

以下是我的代码:

function business_hours($start, $end, $holidays = null){
    $startDate = new DateTime($start);
    $endDate = new DateTime($end);
    $periodInterval = new DateInterval('PT1H');
    $period = new DatePeriod($startDate, $periodInterval, $endDate);
    $count = 0;
    foreach($period as $date){
        #克隆$date以获取属性
        #将工作起始时间设置为8:00
        $startofday = clone $date;
        $startofday->setTime(8,30);
        #克隆$date以获取属性
        #将工作结束时间设置为17:00
        $endofday = clone $date;
        $endofday->setTime(17,30);
        #这将用于条件检查
        $notHoliday = true;
        #现在检查假期数组,并检查范围日期是否与我们拥有的假期相同
        if($holidays != null && is_array($holidays) && in_array($date->format('Y-m-d'), $holidays)){
            $notHoliday = false;
        }
        #检查$date是否大于$startofdate且小于$endofday,并且不是周六或周日
        #还检查日期的小时是否小于等于12或大于13,并且$notHoliday为true
        if($date > $startofday && $date <= $endofday && !in_array($date->format('l'), array('Saturday', 'Sunday')) && ($date->format('H') <= 12 || $date->format('H') > 13) && $notHoliday){
            $count++;
        }
    }
    return $count;
}

我的问题是代码没有计算分钟差。我想要包括分钟计算,以便获得准确的工作时间。

0
0 Comments

计算工作时间出现的原因是需要准确地计算两个日期之间的分钟数。解决这个问题的方法是使用PHP的Carbon包,通过其中的diffInMinutes()方法,可以计算出两个日期之间的分钟数。

use Carbon\Carbon;
$startTime = Carbon::parse('2021-01-01 09:00:00');
$endTime = Carbon::parse('2021-01-01 18:30:00');
$minutesWorked = $endTime->diffInMinutes($startTime);
echo $minutesWorked;

以上代码使用Carbon包,将开始时间和结束时间分别转化为Carbon对象。然后,通过diffInMinutes()方法计算出两个日期之间的分钟数,并将结果存储在$minutesWorked变量中。最后,通过echo语句输出结果。

使用Carbon包的diffInMinutes()方法可以方便地计算出开始时间和结束时间之间的分钟数,避免了手动计算的复杂性和可能的错误。这样,就可以准确地获得工作时间的分钟数。

0