Login: Senha: Registrar-se - Esqueci minha senha
.: Menu
Home
Artigos
Sign. dos Sonhos
Papel de Parede
Ilusões de Ótica
.: Bancos
Emoticons e Gifs
Ícones
Logos
.: Serviços
Mural de Recados
Usuários Online
Bloco de Notas
Formmail
Meu IP
.: Geradores
Gerador de Senhas
Barra de Rolagem
Recomende
Pop-up
Inverter Link
.: Canais
Apostilas
Arte/Cultura
Blog
Busca
Celular
Downloads
E-mail Grátis
Emoticons
Esportes
Filmes
Flogs
Fontes
GTA Mods
Host Grátis
Humor
Infantil
Informática
Jogos
Jogos Online
Linux
Músicas
Notícias
Offline
Redirecionadores
Sites Parceiros
Webdesigners
Webmasters
.: Na Faixa
Sobre
Contato
Recomende-nos
Termos de uso

Calculo de dias úteis entre duas datas com PHP

Enviado em 29/10/2010 - 11:44
Fonte: A A A A

 

Olá amigos.

Hoje gostaria de apresentar um código para calculo de dias úteis.

 

Durante o desenvolvimento de alguns projetos, precisamos por vez calcular a diferença de dias entre duas datas.
Abaixo iremos analisar um script que consegue efetuar este calculo, considerando  dias úteis.

 

Iniciamos criando algumas funções que irão nos ajudar neste trabalho.

 

Data-CalculoDiasUteis.PHP

INICIO DO ARQUIVO//////////////////////////////

//*******************************************************************

//CALCULANDO DIAS NORMAIS

/*Abaixo vamos calcular a diferença entre duas datas. Fazemos uma reversão da maior sobre a menor para não termos um resultado negativo. */

function CalculaDias($xDataInicial, $xDataFinal){

                        $time1 = dataToTimestamp($xDataInicial);  

                        $time2 = dataToTimestamp($xDataFinal);  

 

                        $tMaior = $time1>$time2 ? $time1 : $time2;  

                        $tMenor = $time1<$time2 ? $time1 : $time2;  

 

                        $diff = $tMaior-$tMenor;  

                        $numDias = $diff/86400; //86400 é o número de segundos que 1 dia possui  

                        return $numDias;

}

 

//LISTA DE FERIADOS NO ANO

/*Abaixo criamos um array para registrar todos os feriados existentes durante o ano.*/

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',

                                               '02/02', // Navegantes

                                               date('d/m',$datas['carnaval']),

                                               date('d/m',$datas['sexta_santa']),

                                               date('d/m',$datas['pascoa']),

                                               '21/04',

                                               '01/05',

                                               date('d/m',$datas['corpus_cristi']),

                                               '20/09', // Revolução Farroupilha \m/

                                               '12/10',

                                               '02/11',

                                               '15/11',

                                               '25/12',

                        );

                       

return $feriados[$posicao]."/".$ano;

}                                             

 

//FORMATA COMO TIMESTAMP

/*Esta função é bem simples, e foi criada somente para nos ajudar a formatar a data já em fomato TimeStamp facilitando nossa soma de dias para uma data qualquer.*/

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));

}

  

//CALCULA DIAS UTEIS

/*Eh nesta função que faremos o calculo. Abaixo podemos ver que faremos o calculo normal de dias ($calculoDias), após este calculo, faremos a comparação de dia a dia, verificando se este dia eh um sábado, domingo ou feriado e em qualquer destas condições iremos incrementar 1*/

 

function DiasUteis($yDataInicial,$yDataFinal){

 

                      $diaFDS                            = 0; //dias não úteis(Sábado=6 Domingo=0)

                      $calculoDias                  = CalculaDias($yDataInicial, $yDataFinal); //número de dias entre a data inicial e a final

                        $diasUteis                       = 0;

                       

                        while($yDataInicial!=$yDataFinal){

                                               $diaSemana = date("w", dataToTimestamp($yDataInicial));

                                               if($diaSemana==0 || $diaSemana==6){

                                                                       //se SABADO OU DOMINO, SOMA 01

                                                                       $diaFDS++;

                                               }else{

                                               //senaum vemos se este dia eh FERIADO

                                                                       for($i=0; $i<=12; $i++){

                                                                                              if($yDataInicial==Feriados(date("Y"),$i)){

                                                                                                                      $diaFDS++;                    

                                                                                              }

                                                                       }

                                               }

                                               $yDataInicial = Soma1dia($yDataInicial); //dia + 1

                        }

return $calculoDias - $diaFDS;

}

 

//****************************************************************************

?>                 

                           

                                         

                        $DataInicial                   = "18/10/2010";

                        $DataFinal                      = "27/10/2010";

                       

                        //CHAMADA DA FUNCAO

                        $diasUteis                       = DiasUteis($DataInicial, $DataFinal);

                        $diasNormal                  = CalculaDias($DataInicial, $DataFinal);

                        ?>

                       

                       

                                              

                                               dias entre e ;

                                               dias úteis entre e ;

                                              

                       

 

////////////FIM DO ARQUIVO

 

Bem pessoal, eh isso. Espero ter ajudado com o artigo.

Fico a disposição e aguardando comentários sobre este artigo.

 

Para visualizar este código funcionando, use o link:

HTTP://www.publitz.com.br/herrero/biblioteca/data-calculodiasuteis.php

 

Também peço sugestão para novos tópicos.

 

Em breve estarei publicando um novo artigo que fará a soma de dias úteis em uma data.

 

Ricardo Herrero

Desenvolvedor web PHP

 


Enviado por: herrero

Esse artigo foi visualizado 3911 vezes

Compartilhe este artigo
facebook del.icio.us rec6 digg
Recomende este artigo a um amigo


Voltar
>> Comentários
 
Related Posts Plugin for WordPress, Blogger...
Comentar
Rafael Rodrigues da Silva Coment: meu bom este seu Script

valeu mesmo
 
Buscar Artigos:
.: Mods de GTA
GTA SA, VC, IV
SA - Carros
IV - Carros
Mods
GTA IV
SA - Mods Cleo
.: Saúde
Calculadora de IMC
Peso Ideal
Artigos de Saúde
.: Jogos Online
Ação
Aventura
Cassino
Classicos
Colorir
Corrida
Educativos
Esporte
Estrategia
Infantil
Luta
Meninas
Nave
Tiro
Outros
Adulto
Top Jogos
.: Parceiros
Mural de Recados Grátis
Papel de Parede
Show Moto
Web Visual
.: Nossos Números
Artigos: 930
Categorias: 50
Comentarios: 1863
Usuarios: 26633
Blocos de Nota: 87
Canais: 169

website monitoring service
eXTReMe Tracker
Na Faixa.net - Todos os direitos reservados. 12/2003 - 04/2024
Leia nossos Termos de Uso - Política de Privacidade
Desenvolvido por Web Visual
Crie seu Site - Papel de Parede Grátis - Show Moto - Mural de Recados Grátis - Dicas10