Jump to content

ney sales

Members
  • Content count

    1
  • Joined

  • Last visited

Community Reputation

0 Comum

About ney sales

  1. ney sales

    Calcular diferença de datas em dias uteis?

    Segue abaixo a rotina que fiz com base em outra rotina que encontrei. É só passar a data inicial e a data final que ela retorna o total de dias úteis (sem sábado, domingo e feriado). Obs.: os feriados que estão cadastrados são todos os feriados nacionais e do Rio de Janeiro. Caso você seja de outro estado é só eliminar os feriados do Rio (São Sebastião, São Jorge e Zumbi). <?php //================================================ // Função para calcular os dias úteis entre datas, // excluindo sábados, domingos e feriados Nacionais e Estaduais (RJ) // // Parâmetros: data Inicial e data Final // modo de passagem das datas: // $data1=mktime(0, 0, 0, dia_inicial,mes_inicial,ano_inicial); // $data2=mktime(0, 0, 0, dia_final,mes_final,ano_final); // $x=calcula_dias_uteis($data1,$data2); // // Autor: Ney Sales // Data: 31/05/2010 //==================================================== function calcula_dias_uteis($dataInicial, $dataFinal){ $diaInicial = date("d",$dataInicial); $mesInicial = date("m",$dataInicial); $anoInicial = date("Y",$dataInicial); $diaFinal = date("d",$dataFinal); $mesFinal = date("m",$dataFinal); $anoFinal = date("Y",$dataFinal); //monta array com os feriados no ano. Caso o ano anterior seja diferente do atual monta dois arrays if ($anoInicial!=$anoFinal){ $fer1 = dias_feriados($anoInicial); }else{ $fer1 = 0; } $fer2 = dias_feriados($anoFinal); //calculo timestam das duas datas $timestamp1 = mktime(0,0,0,$mesFinal,$diaFinal,$anoFinal); $timestamp2 = mktime(4,12,0,$mesInicial,$diaInicial,$anoInicial); //diminuo a uma data a outra $segundos_diferenca = $timestamp1 - $timestamp2; //echo $segundos_diferenca; //converto segundos em dias $dias_diferenca = $segundos_diferenca / (60 * 60 * 24); //obtenho o valor absoluto dos dias (tiro o possível sinal negativo) $dias_diferenca = abs($dias_diferenca); //tiro os decimais aos dias de diferenca $dias_diferenca = floor($dias_diferenca); $totalFinalSemana=0; $totalFeriado = 0; for($x=0;$x<$dias_diferenca;$x++){ $diaSemana = date("w", strtotime( "+".$x." day", strtotime($anoInicial."-".$mesInicial."-".$diaInicial))); $dia = date("d", strtotime( "+".$x." day", strtotime($anoInicial."-".$mesInicial."-".$diaInicial))); $mes = date("m", strtotime( "+".$x." day", strtotime($anoInicial."-".$mesInicial."-".$diaInicial))); $ano = date("Y", strtotime( "+".$x." day", strtotime($anoInicial."-".$mesInicial."-".$diaInicial))); //verifica se o dia da semana é sábado ou domingo if($diaSemana==6 || $diaSemana==0){ $totalFinalSemana ++; } //verifica se existe feriado no período selecionado if($fer1!=0){ if($ano==$anoInicial){ foreach($fer1 as $feriado){ $mesFer=date("m",$feriado); $diaFer=date("d",$feriado); if($mesFer==$mes){ if($diaFer=$dia){ $totalFeriado++; } } } } } foreach($fer2 as $feriado){ $mesFer=date("m",$feriado); $diaFer=date("d",$feriado); if($mesFer==$mes){ if($diaFer==$dia){ $totalFeriado++; } } } } //echo "<p>Dias: ".$dias_diferenca; //echo "<p>Não Uteis: ".$totalFinalSemana; //echo "<p>Feriados: ".$totalFeriado; $diferenca = $dias_diferenca-($totalFinalSemana+$totalFeriado); return $diferenca; } //========================================================================= //calcula os feriados no ano function dias_feriados($ano = null) { if ($ano === null) { $ano = intval(date('Y')); } $pascoa = easter_date($ano); // Limite de 1970 ou após 2037 da easter_date PHP consulta http://www.php.net/manual/pt_BR/function.easter-date.php $dia_pascoa = date('j', $pascoa); $mes_pascoa = date('n', $pascoa); $ano_pascoa = date('Y', $pascoa); $feriados = array( // Tatas Fixas dos feriados Nacionail Basileiras mktime(0, 0, 0, 1, 1, $ano), // Confraternização Universal - Lei nº 662, de 06/04/49 mktime(0, 0, 0, 1, 20, $ano), // São Sebastião do Rio de Janeiro mktime(0, 0, 0, 4, 21, $ano), // Tiradentes - Lei nº 662, de 06/04/49 mktime(0, 0, 0, 4, 23, $ano), // São Jorge mktime(0, 0, 0, 5, 1, $ano), // Dia do Trabalhador - Lei nº 662, de 06/04/49 mktime(0, 0, 0, 9, 7, $ano), // Dia da Independência - Lei nº 662, de 06/04/49 mktime(0, 0, 0, 10, 12, $ano), // N. S. Aparecida - Lei nº 6802, de 30/06/80 mktime(0, 0, 0, 11, 2, $ano), // Todos os santos - Lei nº 662, de 06/04/49 mktime(0, 0, 0, 11, 15, $ano), // Proclamação da republica - Lei nº 662, de 06/04/49 mktime(0, 0, 0, 11, 20, $ano), // Zumbi mktime(0, 0, 0, 12, 25, $ano), // Natal - Lei nº 662, de 06/04/49 // These days have a date depending on easter mktime(0, 0, 0, $mes_pascoa, $dia_pascoa - 48, $ano_pascoa),//2ºferia Carnaval mktime(0, 0, 0, $mes_pascoa, $dia_pascoa - 47, $ano_pascoa),//3ºferia Carnaval mktime(0, 0, 0, $mes_pascoa, $dia_pascoa - 2 , $ano_pascoa),//6ºfeira Santa mktime(0, 0, 0, $mes_pascoa, $dia_pascoa , $ano_pascoa),//Pascoa mktime(0, 0, 0, $mes_pascoa, $dia_pascoa + 60, $ano_pascoa),//Corpus Cirist ); sort($feriados); return $feriados; } ?>
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.