Calcular dias entre duas datas com JavaScript

Hoje na parte da tarde, estava eu criando um aplicativo para um cliente no qual os usuários enviarão para ele solicitações de garantia para um determinado produto. Quando cheguei em uma certa parte do projeto, verifiquei que precisaria calcular os dias entre duas datas e precisava necessariamente ser com JavaScript.

Em meus arquivos locais, eu não tinha nada do gênero, então como sempre fui de encontro a ele e encontrei o seguinte script:

var dateDif = {
// Fonte: http://www.bigbold.com/snippets/posts/show/2501
dateDiff: function(strDate1,strDate2){
return (((Date.parse(strDate2))-(Date.parse(strDate1)))/(24*60*60*1000)).toFixed(0);
}
}

Fantástico, simples e eficiente. Era tudo o que eu procurava. Então, criei outra função para verificar a data atual com a data informada pelo usuário, passá-las para a função demonstrada acima e obter o resultado esperado, ou seja, os dias entre duas datas.

As datas que serão passadas para a tal função, precisa estar no seguinte formato:

November 22 2006 – Mês escrito em inglês, seguido do dia e ano. Com isto em mente, desenvolvi o seguinte:

function diasEntreDatas() {
// Declarações de variáveis
var mes, data, dataAtual, dataInfo, arrDataInfo, novaDataInfo, diasEntreDatas;
// Lista dos meses em inglês
mes = [];
mes[0] = "January";
mes[1] = "February";
mes[2] = "March";
mes[3] = "April";
mes[4] = "May";
mes[5] = "June";
mes[6] = "July";
mes[7] = "August";
mes[8] = "September";
mes[9] = "October";
mes[10] = "November";
mes[11] = "December";
// Instancia o objeto Date
data = new Date();
// Pega a data de hoje no seguinte formato: November 22 2006
dataAtual = mes[data.getMonth()] + ' ' + data.getDate() + ' ' + data.getFullYear();
// Pega a data informada pelo usuário
dataInfo = document.getElementById('data').value;
// Separa a data informada pelo usuário através da barra /
arrDataInfo = dataInfo.split('/');
// Formata a data para o seguinte formato: November 22 2006
novaDataInfo = mes[(arrDataInfo[1] - 1)] + ' ' + arrDataInfo[0] + ' ' + arrDataInfo[2];
// Saberemos o total de dias entre: a data informada pelo usuário e a data atual
diasEntreDatas = dateDif.dateDiff(novaDataInfo, dataAtual);
alert(diasEntreDatas);
}

Esta foi minha solução para o problema, e aqui está para compartilhar com todos vocês, espera que seja útil. Até o próximo.

7 ideias sobre “Calcular dias entre duas datas com JavaScript

  1. Pingback: Links comentados via del.icio.us - 9 » Japs

  2. Gostei desta função, funciona perfeitamente! não é um Bug, mas pode ocorre a função
    dateDif.dateDiff(“February 29 2003″,”February 31 2004″); retorna 367 dias mas as duas datas não existem. Acrescentando a função não verifica datas inválidas! para complemento deste artigo posto uma função que verifica data:

    function verifica_data (obj){ //passar um objeto ex.: input testo para verificarse dua data é verdadeira
    var dd; var mm; var aaaa; var tdmm; var data;
    data = obj.value;
    if(data.length != 10){
    alert(“A data tem que ter o seguite formato: \n 10-11-2006 ou 01-06-2006 ou 10/11/2006 ou 01/06/2006\n insira os zeros a esquerda do dia e mês e escreva o ano completo! “);
    obj.focus(); obj.select();
    }
    //sub = Mensagem.substring(1, Mensagem.length);
    dd = data.substring(0,2); // dia da data
    mm = data.substring(3,5); // mes da data
    aaaa = data.substring(6,10); //an da data ex.: 2006
    // document.write(dd+”/”+mm+”/”+aaaa); // para conferência
    if (0 total de dia máximo do mês
    if(mm == 2) // mes fevereiro
    tdmm = (aaaa%4)?28:29; //verifica ano bissexto.
    }else{
    if(7 total de dia máximo do mês
    else {// mês invalido
    dd = 32; tdmm = 0; // data inválida
    }
    }
    if(dd > tdmm){//se o dia for mairo que o total de dias do mês
    alert (“A data que você inseriu não existe! concerte o erro!”);
    obj.focus(); obj.select();
    }
    }

  3. Olá galera, sou iniciante na programação e preciso de uma ajuda que está relacionado a este post…..
    Procurei nos tópicos e não achei nada relacionado…..

    Tenho um input text que recebe uma data no formato dd-mm-YYYY

    Preciso validar o campo da seguinte forma:
    se ele selecionar uma data que ultrapasse mais de 10 dias para trás da data atual ele vai dar um alert.

    Just this……anybody help me ?

  4. Desculpe Leandro, mas para calcular dias entre duas datas você não precisava ter criado a função ´´diasEntreDatas“. Basta acrescentar *30 na conta da função dateDiff.

    return (((Date.parse(strDate2))-(Date.parse(strDate1)))/(24*60*60*30*1000)).toFixed(0);

  5. Desculpa o engano, (24*60*60*30*1000) só leva em conta a diferença de dias em um mesmo mês.