Precisa de um freelancer, códigos-fonte e exemplos completos?
Bem-vindo(a) ao meu site. Além de realizar alguns serviços como freelancer eu tenho alguns códigos-fonte e exemplos completos de Java, Delphi, PHP, Python, C/C++, Hibernate, JPA, Spring, JSP, Servlets, Ruby, Ruby On Rails e muitas outras linguagens e frameworks. Veja como falar comigo clicando aqui.
 
Arquivo de Códigos - Página Inicial
Códigos-fonte
» Códigos-fonte e exemplos completos
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: 151
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 Struts 2
Escrevendo sua primeira aplicação usando o Struts 2
Veja dicas, truques e anotações de outras linguagens
Ruby - Obtendo os segundos a partir de um objeto da classe Time
C - Quer aprender estruturas de dados? Comece entendendo o encadeamento de nós nas estruturas
VB.NET - Obtendo a posição da primeira ocorrência de uma substring em uma string
VB.NET - Como subtrair meses da data atual
Java - Usando Collections.reverseOrder() para ordenar os elementos de uma ArrayList em ordem descendente
VB.NET - Lendo o conteúdo de um arquivo texto uma linha de cada vez
C - Usando a função fread() para ler todo o conteúdo de um arquivo de uma só vez
C# (CSharp) - Como obter as células selecionadas em um DataGridView usando a propriedade SelectedCells
Java - Comparar a data de criação ou alteração de dois arquivos
C# (CSharp) - Como contar as palavras em um TextBox de múltiplas linhas

       

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