Usuário com melhor resposta
dias entre duas datas em javascript

Pergunta
-
tenho um script onde tenho a seguinte situação, pego a data que o usuário informou e preciso saber se a diferença entre a data que ele informou e a data atual é maior que 30, o que achei parte sempre de pegar a data atual soma uns dias e depois calcula a diferença, mais como eu transformo a data digitada no mesmo formato da data atual em javascript para poder ver a diferença tenho isso aqui.
<script language="javascript" type="text/javascript"> function SF_ImprimeBoleto(Sequencial, valor) { var wl_data = document.getElementById("MainContent_Gvboleto_txtvencimento_0").value; hoje = new Date(); dia = hoje.getDate(); mes = hoje.getMonth(); ano = hoje.getFullYear(); if (dia < 10) dia = "0" + dia; mes = mes + 1; if (mes < 10) mes = "0" + mes; dataatual = dia + "/" + mes + "/" + ano; var difdatas = (((Date.parse(dataatual)) - (Date.parse(wl_data))) / (24 * 60 * 60 * 1000)); } } </script>
se coloco a data de 1 mes a frente ele me dá o resultado de -1;Junior
Respostas
-
A quem interessar possa finalmente resolvi meu problema, é o seguinte :
vc primeiro declara uma variável com a data atual e pega o dia,mes e ano separadamente.
depois vc declara uma variável date e convert com a data informada.
depois declara uma variável com um dia = 1000 * 60 * 60 * 24
e finalmente vc faz a diferença, aqui pra mim funcionou perfeitamente
aqui está o script finalizado
//calculando diferença entre dias hoje = new Date(); dia = hoje.getDate(); mesatu = hoje.getMonth(); ano = hoje.getFullYear(); //pegando o ano informado pelo usuário anodig = wl_data.substr(6, 4); //pegando o mes informado pelo usuário mesdig = wl_data.substr(4, 2); //pegando o ano informado pelo usuário diadig = wl_data.substr(0, 2); //convertrando a a data informada para o tipo Date var z = new Date(Date.parse(anodig + "," + mesdig + "/" + diadig)); //convertendo a data atual para o tipo Date var x = new Date(Date.parse(hoje.getFullYear() + "," + (hoje.getMonth() + 1) + "/" + hoje.getDate())); //declarando uma variável com o valor de 1 dia var umdia = 1000 * 60 * 60 * 24; //declarando uma variávell com a diferença entre as datas var c = parseInt(z.getTime() - x.getTime()); //declarando uma variável com os dias dessa diferença var d = (c / umdia);
o script está todo comentado para quem quiser aproveitar.
Detalhe na conversão para o tipo Date, não sei o motivo mais tive que colocar antes do ano a "/" pq com "," data datainválida.
Junior
- Editado Junior_luiz terça-feira, 28 de agosto de 2012 13:58
- Marcado como Resposta Junior_luiz terça-feira, 28 de agosto de 2012 13:58
Todas as Respostas
-
Acho que pode te ajudar:
function days_between(date1, date2) { // The number of milliseconds in one day var ONE_DAY = 1000 * 60 * 60 * 24 // Convert both dates to milliseconds var date1_ms = date1.getTime() var date2_ms = date2.getTime() // Calculate the difference in milliseconds var difference_ms = Math.abs(date1_ms - date2_ms) // Convert back to days and return return Math.round(difference_ms/ONE_DAY) }
Referência: http://www.mcfedries.com/javascript/daysbetween.asp
-
Breno isso que vc postou já achei, minha dificuldade é essa, pq qdo gerarmos a data tipo esse comando
hoje = new date();
essa informação fica no formatoo por exemplo : August 27 2012 e qdo o usuário digita fica assim : 27/08/2012 o meu problema é exatamente deixar os dois iguais para assim poder calcular a diferença.
Junior
- Editado Junior_luiz segunda-feira, 27 de agosto de 2012 13:49
-
Olá Junior,
Estou passando o código de uma função que compara duas datas digitadas (dd/MM/yyyy) e mais o horário (HH:mm). É só verificar como é feito.
function ValidaData(data1, hora1, data2, hora2) {
var min1 = 0, seg1 = 0, min2 = 0, seg2 = 0;
var dia1 = 1, mes1 = 1, ano1 = 2011;
var dia2 = dia1, mes2 = mes1, ano2 = ano1;if (hora1 != "") {
min1 = hora1.substr(0, 2);
seg1 = hora1.substr(3, 5);
}if (hora2 != "") {
min2 = hora2.substr(0, 2);
seg2 = hora2.substr(3, 5);
}if (data1 != "") {
dia1 = data1.substr(0, 2);
mes1 = data1.substr(3, 2);
ano1 = data1.substr(6, 4);
}if (data2 != "") {
dia2 = data2.substr(0, 2);
mes2 = data2.substr(3, 2);
ano2 = data2.substr(6, 4);
}
var dt1 = new Date(ano1, mes1 - 1, dia1, min1, seg1);
var dt2 = new Date(ano2, mes2 - 1, dia2, min2, seg2);
if (dt1 >= dt2)
return false;
return true;
} -
A função pega as das e horários digitados e formata tudo para passar pro construtor "Date". Dessa forma o javascript detectará exatamente sua. Lembrando que no mês é subtraido de 1, pois o javascript começa do mês 0 e vai ate 0 11.
No final da função as duas datas são comparadas e se a primeira for maior ou igual a segunda ele retorna falso.
-
Marcos entendi, mais o que preciso é pegar a data atual(hoje) e comparar com a data informada pelo usuário, como te expliquei para pegar a data atual uso
hoje = new date();
Esse comando retorna o seguinte valor : August 27 2012 10:12:12
o Campo que o usuário informa a data o resultado é assim :
datadig = 27/08/2012
Como vou comparar os formatos e principalmente que ele tb compara a hora e não pego a hora qdo o usuário digita.
Junior
-
-
Assim não dá certo, ele não tras o valor correto, tenho isso mais qdo informo a data com um mes da data atual ele me tras o valor 1 e não 30.
hoje = new Date(); dia = hoje.getDate(); mesatu = hoje.getMonth(); ano = hoje.getFullYear(); var umdia = 1000 * 60 * 60 * 24; if (mesatu < 10) mesatu = "0" + (mesatu + 1); var a = new Date(Date.parse(dia + "/" + mesatu + "/" + ano)); var b = new Date(Date.parse( wl_data)); var c = parseInt(b.getTime()-a.getTime()); var d = c / (24 * 60 * 60 * 1000);
onde wl_data é a data que o usuário informou e ja esta no padrão dd/MM/YYYYJunior
-
A quem interessar possa finalmente resolvi meu problema, é o seguinte :
vc primeiro declara uma variável com a data atual e pega o dia,mes e ano separadamente.
depois vc declara uma variável date e convert com a data informada.
depois declara uma variável com um dia = 1000 * 60 * 60 * 24
e finalmente vc faz a diferença, aqui pra mim funcionou perfeitamente
aqui está o script finalizado
//calculando diferença entre dias hoje = new Date(); dia = hoje.getDate(); mesatu = hoje.getMonth(); ano = hoje.getFullYear(); //pegando o ano informado pelo usuário anodig = wl_data.substr(6, 4); //pegando o mes informado pelo usuário mesdig = wl_data.substr(4, 2); //pegando o ano informado pelo usuário diadig = wl_data.substr(0, 2); //convertrando a a data informada para o tipo Date var z = new Date(Date.parse(anodig + "," + mesdig + "/" + diadig)); //convertendo a data atual para o tipo Date var x = new Date(Date.parse(hoje.getFullYear() + "," + (hoje.getMonth() + 1) + "/" + hoje.getDate())); //declarando uma variável com o valor de 1 dia var umdia = 1000 * 60 * 60 * 24; //declarando uma variávell com a diferença entre as datas var c = parseInt(z.getTime() - x.getTime()); //declarando uma variável com os dias dessa diferença var d = (c / umdia);
o script está todo comentado para quem quiser aproveitar.
Detalhe na conversão para o tipo Date, não sei o motivo mais tive que colocar antes do ano a "/" pq com "," data datainválida.
Junior
- Editado Junior_luiz terça-feira, 28 de agosto de 2012 13:58
- Marcado como Resposta Junior_luiz terça-feira, 28 de agosto de 2012 13:58