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.
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:
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?
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 asnotas legaisantes de proceder com
o acesso e leitura do
conteúdo disponibilizado nestas páginas.