工作时间内完成的时间


Time completion in working hours

好吧,这不是一个编程问题,但我似乎只能想到非常复杂的方法来解决这个问题。

我们在办公室里运行一个脚本。我们需要确定该脚本仅在工作时间(工作时间为上午9点至下午5点)需要多长时间。例如,假设脚本在周一下午2点开始,并在周二下午4点结束。这个脚本花了26个小时才完成,但只花了10个小时。该脚本可以在一个工作日内完成,但也可以跨越许多天。脚本只能在一个工作日内开始和结束。时间戳是用Unix格式完成的。

我不知道如何在SQL中做到这一点,但我知道网络管理员更喜欢这样。

服务器端脚本语言为PHP。这是第二个选项。我的尝试如下:

$workingDay = 24;
$workingDayHours = 8;
$workingTime = 0;
while($timeTaken >= $workingDay) {
  $workingTime += $workingDayHours;
  $timeTaken -= $workingDay;
}
$workingTime += $timeTaken;

我现在不能真正正确地思考,太多的工作,所以虽然这个方法是愚蠢的,它似乎在这种情况下工作,因为$timeTaken将始终是<= 8 ||>= 24。

无论如何,如果能看到一个更好更聪明的方法就太好了(也许是一个可以在任何时间内工作的方法)。

类似这样的内容(仅当作业在9:00-17:00之间开始和完成时才有效)…(未测试,抱歉)

以小时为单位的运行时间:

 HOUR(TIMEDIFF(enddatetime-startdatetime))

计算工作时数:

我们需要删除作业未运行的n个16小时周期,(任何运行超过16小时的作业必须运行超过n天)

duration - (FLOOR(duration/16)*16)

:

SELECT HOUR(TIMEDIFF(enddatetime-startdatetime)) - 
          (FLOOR(HOUR(TIMEDIFF(enddatetime-startdatetime))/16)*16) AS duration

如果要删除周末,可以简单地查看开始周数和结束周数,如果它们不相同,则删除48小时(作业运行的每个周末),然后从上述持续时间

中删除此值
(week(enddatetime,1) - week(startdatetime,1)) * 48