Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Criar programa que calcula diferença entre datas.

Boa tarde, galera

Estou tentando criar um programa para saber a quantidade de dias entre duas datas. Vejam minha tentativa frustrada:

var dataInicial = parseInt(prompt("Qual é a data de emissão da Nota Fiscal?"));

var dataFinal = parseInt(prompt("Qual é a data de vencimento da fatura?"));

var DDL = dataFinal - dataInicial;

mostra ("Essa fatura tem vencimento com " + DDL + " Dias");

Creio que devo definir que quero que o JS identifique esses números como data, como eu faço isso?

5 respostas
solução!

O código seria este:

  // Converta as datas em milissegundos
  var dataInicialMilissegundos = new Date(prompt("Qual é a data de emissão da Nota Fiscal?")).getTime();
  var dataFinalMilissegundos = new Date(prompt("Qual é a data de vencimento da fatura?")).getTime();

  // Transforme 1 dia em milissegundos
  var umDiaMilissegundos = 1000*60*60*24;

  // Calcule a diferença em milissegundos
  var diferencaMilissegundos = dataFinalMilissegundos  - dataInicialMilissegundos;

  // Converta novamente para data
  var diferencaData = Math.round(diferencaMilissegundos/umDiaMilissegundos);

  // Exibe diferença
  mostra("Essa fatura tem vencimento em " + diferencaData + " dias");

Este código não está validando a data no formato dd/MM/aaaa. Então você tem que inserir a data no formato MM/dd/aaaa.

Espero ter ajudado.

Abraço, bons estudos!

Muito obrigado!

Caso puder, queria que me explicasse como faço para validar em DD/MM/AAAA

Ficaria assim:

  // Recebe as datas que estão no padrão americano
  var dataInicialRecebida = new Date(prompt("Qual é a data de emissão da Nota Fiscal?"));
  var dataFinalRecebida = new Date(prompt("Qual é a data de vencimento da fatura?"));

  // Transforma a data no padrão brasileiro
  // É somado +1 ao mês, pois é contado a partir do zero (Ex: janeiro retorna 0, fevereiro retorna 1...)
  var dataInicialFormatoBR = dataInicialRecebida.getDate() + "/" + (dataInicialRecebida.getMonth() + 1) + "/" + dataInicialRecebida.getFullYear();
  var dataFinalFormatoBR = dataFinalRecebida.getDate() + "/" + (dataFinalRecebida.getMonth() + 1) + "/" + dataFinalRecebida.getFullYear();

  // Converta as datas em milissegundos
  var dataInicialMilissegundos = new Date(dataInicialFormatoBR).getTime();
  var dataFinalMilissegundos = new Date(dataFinalFormatoBR).getTime();

  // Transforme 1 dia em milissegundos
  var umDiaMilissegundos = 1000*60*60*24;

  // Calcule a diferença em milissegundos
  var diferencaMilissegundos = dataFinalMilissegundos  - dataInicialMilissegundos;

  // Converta novamente para data
  var diferencaData = Math.round(diferencaMilissegundos/umDiaMilissegundos);

  // Exibe diferença
  mostra("Essa fatura tem vencimento em " + diferencaData + " dias");

Bom dia

Muito obrigado pela explicação adicionei essas linhas ao meu programa, tentei entender algumas funções ai mais ainda sou muito iniciante, rs.

Está acontecendo um erro, testei o codigo colocando a data de emissão da nota: 06/04/2016

e data de vencimento da fatura: 15/04/2016

apareceu a seguinte mensagem depois de colocar as duas datas: Essa fatura tem vencimento em NaN dias

O que pode ser?