工作时间完成

时间:2011-08-22 11:51:45

标签: php mysql time timestamp

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

我们在办公室里运行一个脚本。我们需要确定此脚本在工作时间内需要多长时间(工作时间为上午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。

无论如何,看到更好更智能的方法(也许可以在任何时间内工作)都会很棒。 SQL也很棒。

1 个答案:

答案 0 :(得分:0)

这样的事情(仅在工作开始并在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