Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala galera,
Estou montando um sistema de abertura de chamados e me surgiu a seguinte dúvida: como calcular prazo, considerando dias e horas úteis?
Preciso calcular qual seria a data/hora após 6h, considerando dias e horas úteis (digamos assim) sendo que essas horas seriam o intervalo de 08:00 as 19:00 de segunda a sexta.
Para cálculo de DIAS úteis, eu achei uma função da internet que funciona perfeitamente:
function Feriados($ano,$posicao){
$dia = 86400;
$datas = array();
$datas['pascoa'] = easter_date($ano);
$datas['sexta_santa'] = $datas['pascoa'] - (2 * $dia);
$datas['carnaval'] = $datas['pascoa'] - (47 * $dia);
$datas['corpus_cristi'] = $datas['pascoa'] + (60 * $dia);
$feriados = array (
'01/01',
date('d/m',$datas['carnaval']),
date('d/m',$datas['sexta_santa']),
date('d/m',$datas['pascoa']),
date('d/m',$datas['corpus_cristi']),
'25/12',
);
return $feriados[$posicao]."/".$ano;
}
// Formata como timestamp
function dataToTimestamp($data){
$ano = substr($data, 6,4);
$mes = substr($data, 3,2);
$dia = substr($data, 0,2);
return mktime(0, 0, 0, $mes, $dia, $ano);
}
// Soma 01 dia
function Soma1dia($data){
$ano = substr($data, 6,4);
$mes = substr($data, 3,2);
$dia = substr($data, 0,2);
return date("d/m/Y", mktime(0, 0, 0, $mes, $dia+1, $ano));
}
function SomaDiasUteis($xDataInicial,$xSomarDias){
for($ii=1; $ii<=$xSomarDias; $ii++){
$xDataInicial=Soma1dia($xDataInicial); // Soma dia normal
// Verifica se é dia útil
if(date("w", dataToTimestamp($xDataInicial))=="0"){
// Se for domingo ou feriado , soma 01
$xDataInicial=Soma1dia($xDataInicial);
}else if(date("w", dataToTimestamp($xDataInicial))=="6"){
// Se for sábado soma 02
$xDataInicial=Soma1dia($xDataInicial);
$xDataInicial=Soma1dia($xDataInicial);
}else{
// Verifica se é feriado
for($i=0; $i<=12; $i++){
if($xDataInicial==Feriados(date("Y"),$i)){
$xDataInicial=Soma1dia($xDataInicial);
}
}
}
}
// Retorna a data
return $xDataInicial;
}
Agora a dúvida é como acrescentar as horas...
Exemplificando:
Cadastro um chamado em: 04-07-2013 18:50. Considerando as 6h "úteis", o prazo final para atender esse chamado seria 05-07-2013 13:50, ou seja, as 13h50m do dia seguinte.
Agradeço desde já.
Carregando comentários...