O que o Kraus falou está correto,
o TIMEDIFF vai trazer a diferença entre as datas, todavia você terá que tratar as horas não consideradas úteis.
Lembrando que não adianta subtrair horas não úteis de um dia se a tarefa começou naquele dia.
O dia que a tarefa começou você não pode descontar as horas antes das 08:00
Exemplo se a tarefa começou ontem 09:00 AM você deve descontar hora do almoço e pós 18:00 e se ela terminar hoje 03:00 PM (15:00) você desconta as horas antes das 08:00 e a hora do almoço.
Então você trata dia de início e dia final da tarefa pois terão horas que não úteis diferenciadas.
Eu faria algo semelhante ao abaixo:
$horas_dia_inicio + $horas_dia_final + (($dias_trabalhados - 2) * horas_uteis_dia_normal)
Lembrando que isso se estiver tratando apenas de horário trabalhado. Se for algo para gerência de projeto ou calcular rendimento o conceito é bem diferente.
Define bem o que quer antes de iniciar o código.
Função abaixo deve lhe ajudar na tarefa se quiser fazer direto pelo PHP o cálculo, porém ainda terá de reduzir as horas conforme explicado acima.
function diferenca_tempo($data1, $data2, $tipo='H'){
//$data1 = "01/05/2012 08:00:01";
//$data2 = "01/05/2013 08:00:03";
if(!$data1 || !$data2) return false;
for($i=1;$i<=2;$i++){
${"dia".$i} = substr(${"data".$i},0,2);
${"mes".$i} = substr(${"data".$i},3,2);
${"ano".$i} = substr(${"data".$i},6,4);
${"horas".$i} = substr(${"data".$i},11,2);
${"minutos".$i} = substr(${"data".$i},14,2);
${"segundos".$i} = substr(${"data".$i},17,2);
}
$segundos = @mktime($horas2,$minutos2,$segundos2,$mes2,$dia2,$ano2) -@mktime($horas1,$minutos1,$segundos1,$mes1,$dia1,$ano1);
switch($tipo){
case "H": $difere = @$segundos/60/60; break;
case "D": $difere = @$segundos/86400; break;
case "S": $difere = @$segundos; break;
}
return $difere;
}
*Obs: Não tenho os créditos da função :/ acho que ela já rolou aqui na lista