【问题标题】:PHP calculate half of 8 hour working dayPHP计算8小时工作日的一半
【发布时间】:2015-10-29 08:53:27
【问题描述】:

我们有Moodleplugin,我们在其中添加每个员工的travel time。 到目前为止,我们在days 中计算了旅行时间的持续时间,因为我们仅以timepickup- 21.10.2105 timereturn-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;

如您所见,我们在hoursminutestimepickuptimereturn 中添加了导入exact time 的选项。

如何计算行程时间并将其显示在dayshalf days 中(我们假设half day4 hours 来自8 hour 工作日。

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

【问题讨论】:

  • 你是否四舍五入到最接近的半天,所以08:00-12:00 是 0.5 天,而 08:00-12:03 是 1 天?
  • 我会将4,5 小时用作0,5 天的基准,而不是1 天的基准。
  • 我计算半天时出错了。请参阅我的更新答案。
  • 刚看到,谢谢指正。

标签: php mysql moodle


【解决方案1】:

这样的东西可以工作

$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,则添加一整天。

【讨论】:

  • 到目前为止,我们添加了相同的 date(例如 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 小时的 working day 进行旅行。
  • 20 号是几月几号?无论如何:这是一个更复杂的问题。如果您将每 8 小时计算为 1 个工作日,则此计算有效,但如果每 24 小时不能超过 1 个工作日,则您需要更改公式,或创建一个计算每天时间的函数,然后将其相加。如果某人每天工作 16 小时会怎样?算不算两天?你会在 1 天停止计数吗?它是如何工作的?
  • 这个月是 10 号,抱歉。工作日应为上午 8 点至下午 4 点。时间是固定的,一天不会超过8小时。所以如果你有05.10.2015 15:05 - 10.10.2015 10:04之间的时间段,你应该能够显示为结果4,5work days(4个完整工作日和3个小时,我们算作0,5个工作日)
  • 由于要求发生了变化,我会将此作为一个单独的问题提出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-29
  • 2011-06-21
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
相关资源
最近更新 更多