2015-10-29 101 views
4

我们有Moodleplugin,我们在其中添加travel time每个员工。 到目前为止,我们计算了days的旅行时间的持续时间,因为我们仅以这种形式为每位员工添加了数据。timepickup - 21.10.2105 timereturn -23.10.2015。PHP计算8小时工作日的一半

$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; 

正如你可以看到,我们添加导入exact time选项timepickuptimereturnhoursminutes

如何计算出行时间和dayshalf days显示它(我们假定,half day来自8 hour4 hours工作日

所以不是旅行时间1 day(s)添加timepickup - 21.10.2105 08:00timereturn - 23.10.2015 12:00,我们将显示0,5 day(s)

+0

你是否会四舍五入到最近的半天,以便08:00-12:00是0,5天而08:00-12:03'是1天? – jurgemaister

+0

我会用''4,5'小时作为'0,5'天的基准,并且比'1'天的要多。 – freudsfreund

+0

我计算了半天的错误。看到我更新的答案。 – jurgemaister

回答

2

像这样的东西可以工作

$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; 

这有点粗糙,但如果剩余时间差为4.5小时或更少,最终增加半天,如果剩余时间大于4.5,则增加一整天。

+0

到现在为止,我们添加了相同的“日期”(例如20.20.2015 10:00 - 20.20.2015 12:00,并且您获得了0.5天),但是如果我使用相同的代码作为基于不同日期的差异它显示“错误”结果。例如:05.20.2015 16:05 - 10.20.2015 12:04,我们得到14.5天的差异。我们有每天8小时的工作日,在那里旅行。 – freudsfreund

+0

哪个月是第20个?无论如何:这是一个更复杂的问题。如果每8小时计算1个工作日,则此计算方法有效,但如果每24小时不能超过1个工作日,则需要更改Formua,或创建计算每天时间的函数并将其累加起来。如果某人有16个工作日,会发生什么?你认为这是两天吗?你在1天停止计数?这是如何运作的? – jurgemaister

+0

这个月是10日,对不起。工作日应该是从上午8点到下午4点。时间是固定的,每天没有人会超过8小时。因此,如果您拥有'05.10.2015 15:05' - '10.10.2015 10:04'之间的时间段,则应该能够显示'4,5'工作日的结果(4个工作日和3个工作日小时,我们计算为0.5个工作日) – freudsfreund