好吧,不是编程问题,而是我似乎只能想到解决这个问题的非常复杂的方法。
我们在办公室里运行一个脚本。我们需要确定此脚本在工作时间内需要多长时间(工作时间为上午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也很棒。
答案 0 :(得分:0)
以小时为单位的经过时间:
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