PHP计算8小时工作日的一半

PHP计算8小时工作日的一半,php,mysql,moodle,Php,Mysql,Moodle,我们有Moodle插件,在这里我们添加了每位员工的旅行时间。 到目前为止,我们计算了旅行时间的持续时间,单位为天,因为我们仅以时间拾取-21.10.2105时间返回-23.10.2015的形式添加了每位员工的数据 正在此处的函数中添加数据: $user->timepickup = gmdate("Y-m-d H:i", $timepickup); $user->timereturn = gmdate("Y-m-d H:i", $timereturn); 计算行程时间: $datet

我们有
Moodle
插件
,在这里我们添加了每位员工的
旅行时间
。 到目前为止,我们计算了旅行时间的持续时间,单位为
,因为我们仅以
时间拾取
-21.10.2105
时间返回
-23.10.2015的形式添加了每位员工的数据

正在此处的函数中添加数据:

$user->timepickup = gmdate("Y-m-d H:i", $timepickup);
$user->timereturn = gmdate("Y-m-d H:i", $timereturn);
计算行程时间:

$datetime1 = strtotime($employee->timepickup);
$datetime2 = strtotime($employee->timereturn);
$interval = $datetime2 - $datetime1;
如您所见,我们添加了导入
时间拾取
时间返回
小时
分钟
中的
精确时间
的选项

如何计算行程时间并以
半天
显示(我们假设
半天
8小时
工作日算起为
4小时


因此,我们将显示这样的功能,而不是添加
timepick
-
21.10.2105 08:00
timereturn
-
23.10.2015 12:00
,而不是旅行时间
1天
,我们将显示
0,5天

$pickup = strtotime($employee->timepickup);
$return = strtotime($employee->timereturn);
$timediff = ($return - $pickup) / 3600;

$days = floor($timediff / 8);
$halfday = ($timediff - $days * 8) / 4.5;

$days += $halfday < 1 ? 0.5: 1;
$pickup=strottime($employee->timepickup);
$return=strottime($employee->timereturn);
$timediff=($return-$pickup)/3600;
$days=最低限额($timediff/8);
$halfday=($timediff-$days*8)/4.5;
$days+=$halfday<1?0.5:1;

这有点粗糙,但是如果剩余的时差小于等于4.5小时,你会加上半天,如果剩余的时差大于4.5小时,你会加上一整天。

你是否会四舍五入到最接近的半天,因此
08:00-12:00
是0,5天,而
08:00-12:03
是1天?我会用它作为基准
4,50,5
天的de>小时数,超过了
1
天的de>小时数。我计算半天时出错。请参阅我的更新答案。刚刚看到,感谢您的更正。到目前为止,我们添加了相同的
日期
(例如20.20.2015 10:00-20.20.2015 12:00,您可以得到0,5天)但是,如果我使用相同的代码来表示不同日期的差异,它会显示
false
结果。例如:05.20.2015 16:05-10.20.2015 12:04,我们得到14,5天的差异。我们每天有8小时的
工作日,旅行发生在哪里。哪一个月是20号?无论如何,这是一个更复杂的问题。这是c如果你将每8小时计算为1个工作日,那么计算是有效的,但是如果你不能将每24小时计算超过1个工作日,那么你需要更改公式,或者创建一个计算每天时间的函数,然后将其相加。如果有人每天工作16小时,会发生什么情况?你是否将其计算为两天?你是否停止在1天计算?这是如何工作的这个月是第10个月,很抱歉。工作日应该是从上午8点到下午4点。时间是固定的,没有人每天会超过8小时。因此,如果您的时间介于
05.10.2015 15:05
-
10.10.2015 10:04
,您应该能够显示结果
4,5
工作日
(4个完整工作日和3个小时,我们计算为0.5个工作日)由于要求发生了变化,我想单独问这个问题。