Arquivo de Códigos - Página Inicial
Códigos-fonte
» Boletos Bancários
» Calendário de Eventos
Linguagens
» ActionScript
» Adobe AIR
» Adobe Flex
» AJAX
» C
» C#
» C++
» CSS
» Delphi
» DHTML - Dynamic HTML
» HTML/XHTML
» Java
» JavaFX
» JavaScript
» Java Servlets
» JSP - Java Server Pages
» Perl
» PHP
» PHP-GTK
» Python
» Ruby
» Tcl/Tk
» VB.NET
Bancos de Dados
» IBM DB2
» MySQL
Frameworks
» CodeIgniter
» jQuery
» JSF - Java Server Faces
» Qt
» Ruby On Rails
» Struts
» Struts 2
» wxWidgets
» Zend Framework
Container/Servidor
» Apache Tomcat
» Apache Web Server
Ferramentas
» Apache Ant
» iTextSharp (iText#)
Referências
» CSS1 e CSS2
» JavaScript
Serviços On-Line
» Qual é meu IP?
» Tabela Cores HTML I
» Tabela Cores HTML II
» Lista de Mime Types
» Códigos Teclas Virtuais
Usuários On-Line
Visitantes: 20
PHP
O que há de novo no PHP 5?
40 dicas e truques sobre como trabalhar com datas e horas em PHP
60 dicas e truques sobre como trabalhar com strings e caracteres em PHP
PHP e a Orientação a Objetos - POO (Curso Completo)

DHTML
Curso completo de DHTML para iniciantes

CSS
Como definir uma imagem de fundo fixa na página
Definindo uma imagem de fundo para botões HTML
Você está aqui: Inicio -> Tutoriais -> JavaScript
Como calcular os dias decorridos entre duas datas
1 - Código completo e explicação passo-a-passo

Clique aqui para conhecer as propriedades e métodos do objeto Date

Um trecho de código muito útil e que nem sempre está por perto quando precisamos, é aquele que nos permite obter a quantidade de dias decorridos entre duas datas. Neste mini-tutorial você obterá uma função completa que pode ser utilizada para esta finalidade e levará, como bônus, as explicações passo-a-passo para que você possa modificar o código à vontade.


Comece criando uma página HTML e copie e cole o código abaixo na parte <head></head>.

Código para a função diasDecorridos:
<script language="javascript">
<!--					  
  function diasDecorridos(dt1, dt2){
    // variáveis auxiliares
    var minuto = 60000; 
    var dia = minuto * 60 * 24;
    var horarioVerao = 0;
    
    // ajusta o horario de cada objeto Date
    dt1.setHours(0);
    dt1.setMinutes(0);
    dt1.setSeconds(0);
    dt2.setHours(0);
    dt2.setMinutes(0);
    dt2.setSeconds(0);
    
    // determina o fuso horário de cada objeto Date
    var fh1 = dt1.getTimezoneOffset();
    var fh2 = dt2.getTimezoneOffset(); 
    
    // retira a diferença do horário de verão
    if(dt2 > dt1){
      horarioVerao = (fh2 - fh1) * minuto;
    } 
    else{
      horarioVerao = (fh1 - fh2) * minuto;    
    }
    
    var dif = Math.abs(dt2.getTime() - dt1.getTime()) - horarioVerao;
    return Math.ceil(dif / dia);
}
//-->
</script>

Abra a página no seu navegador para se ceritificar de que o código foi colado corretamente. Na ausência de mensagens de erro poderemos passar para a segunda etapa. Copie o trecho de código abaixo e cole na parte <body></body> de sua página HTML:
<script language="javascript">
<!--					  
  var data1 = new Date(2006, 1, 10);
  var data2 = new Date(2006, 2, 20);
  document.write("Diferença em dias: " + diasDecorridos(data1, data2));
//-->
</script>

Abra a página no navegador novamente e verá o seguinte resultado:

Diferença em dias: 38

Se você realmente obteve este resultado, é sinal de que você está pronto para usar a função em seus códigos. Antes de prosseguirmos, experimente fornecer outras datas para a função. Se você tem dúvidas sobre como construir objetos Date representando uma determinada data, clique aqui e dê uma olhada na referência.

Vamos analisar o código passo-a-passo agora. Comecemos com a declaração das variáveis minuto, dia e horarioVerao:

var minuto = 60000;
var dia = minuto * 60 * 24;
var horarioVerao = 0;


O cálculo de datas em JavaScript é feito usando-se milisegundos. Por esta razão definimos que um minuto contém 60000 milisegundos e que um dia contém 60000 * 60 * 24, ou seja, 86400000 milisegundos.

Uma das dificuldades que os iniciantes enfrentam ao lidar com o cálculo de horas, é o horário de verão. Uma distração aqui e o código funcionaria incorretamente. Por hora nossa variável horarioVerao terá o valor 0. Mais adiante você entenderá o propósito.

Como estamos interessados em saber apenas a quantidade de dias entre as duas datas, não há problema em zerarmos as horas dos dois objetos Date. Isso é feito nas linhas:

dt1.setHours(0);
dt1.setMinutes(0);
dt1.setSeconds(0);
dt2.setHours(0);
dt2.setMinutes(0);
dt2.setSeconds(0);


Voltemos nossa atenção para a questão do horário de verão. Se estivermos medindo a quantidade de dias entre duas datas e apenas uma delas estiver no horário de verão teremos uma diferença de uma hora, para mais ou para menos. Isso poderia comprometer o resultado, uma vez que usamos o método Math.ceil para arredondar o resultado da divisão do número total de milisegundos decorrido entre as duas datas pelo número de milisegundos em um dia.

As próximas duas linhas do código:

// determina o fuso horário de cada objeto Date
var fh1 = dt1.getTimezoneOffset();
var fh2 = dt2.getTimezoneOffset();


usam o método getTimezoneOffset para obter a diferença de fuso horário de cada uma das datas informadas. Este método retorna a diferença em minutos entre a hora no computador local e a Hora Universal Coordenada - Universal Coordinated Time (UTC). Se uma das datas (mas não as duas) estiver no horário de verão o próximo trecho de código detecta e faz os ajustes necessários:

// retira a diferença do horário de verão
if(dt2 > dt1){
  horarioVerao = (fh2 - fh1) * minuto;
}
else{
  horarioVerao = (fh1 - fh2) * minuto;
}


O horário de verão brasileiro adianta os relógios em uma hora. A diferença do horário de Brasília para o horário UTC é de -3 horas. No horário de verão esta diferença cai para -2 horas. Suponhamos que a segunda data esteja no horário de verão. Neste caso a diferença da variável fh2 para fh1 seria de 60 minutos. Ao multiplicarmos esta diferença por 60000 teremos a quantidade exata de milisegundos referentes a uma hora, ou seja, 3600000 milisegundos.

O próximo passo é obter a diferença de milisegundos entre as duas datas:

var dif = Math.abs(dt2.getTime() - dt1.getTime()) - horarioVerao;

Aqui nós substraímos os milisegundos da primeira data da segunda data (consulte o método getTime caso tiver alguma dúvida sobre seu uso). Em seguida usamos o método Math.abs para retirar o sinal negativo do resultado, caso a primeira data seja maior que a segunda. Para finalizar subtraímos o valor de horarioVerao do resultado da subtração anterior.

A linha final da função:

return Math.ceil(dif / dia);

divide a diferença em miligundos entre as duas datas pela quantidade de milisegundos em em uma dia. Simples, não?
 
 
Arquivo de Códigos - Página Inicial
Veja dicas, truques e anotações de iTextSharp
Criando um documento PDF passo-a-passo usando iTextSharp e Visual C# 2005
Baixando, instalando e testando o iTextSharp no Visual Studio .NET 2005
Veja dicas, truques e anotações de outras linguagens
C# (CSharp) - Obtendo a quantidade de dias decorridos desde uma determinada data
PHP - Como testar se o valor de uma variável é NULL
Java - Gerando um número aleatório no intervalo de 10 a 20 usando Math.random
JavaScript - Como usar o método toLocaleTimeString para exibir a hora de acordo com as configurações do computador do usuário
PHP - Usando herança em PHP
Delphi - Convertendo de binário para octal
C - Acessando os caracteres de uma string individualmente usando índices
ActionScript - Escrevendo uma função que verifica se um determinado ano é bissexto
C++ - Removendo parte de uma string usando o método erase
C# (CSharp) - Como criar, atribuir valores e percorrer um array de duas dimensões em C#


http://www.arquivodecodigos.net
:: Arquivo de Códigos - Softwares e Consultoria em Programação ::
Todo o conteúdo deste site, quando não devidamente observado, pertence a seus idealizadores e não
poderá ser usado para outras finalidades senão estudo e aprimoramento de técnicas de programação.
Certifique-se de ler as notas legais antes de proceder com o acesso e leitura do
conteúdo disponibilizado nestas páginas.

Fale Conosco: (62) 3261-7018 / (62) 8185-0734

Desenvolvedor Responsável: Osmar J. Silva

Página Inicial Contatos Pesquisar Mapa do Site