none
dias entre duas datas em javascript RRS feed

  • 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

    sexta-feira, 24 de agosto de 2012 19:11

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
    terça-feira, 28 de agosto de 2012 13:56

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

    segunda-feira, 27 de agosto de 2012 13:16
  • 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
    segunda-feira, 27 de agosto de 2012 13:48
  • 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;
            }

    segunda-feira, 27 de agosto de 2012 13:54
  • 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.

    segunda-feira, 27 de agosto de 2012 14:00
  • 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

    segunda-feira, 27 de agosto de 2012 14:46
  • basta fazer:

    hoje = new Date();

    hoje = hoje.getDate() + "/" + (hoje.getMonth() + 1) +"/" hoje.getFullYear();

    e depois comparar com a data que vem da textbox.

    segunda-feira, 27 de agosto de 2012 16:03
  • 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/YYYY

    Junior

    terça-feira, 28 de agosto de 2012 12:04
  • 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
    terça-feira, 28 de agosto de 2012 13:56