Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

pcdesign

somar inteiros a datainicio p/ obter datafinal

Recommended Posts

olá galera.

 

Estou tentando criar uma função para obter um total e a data final.

e acabei travando no calculo da data.

a tal data é confor um plano e pode ser: Diária, Semanal, Mensal, Anual.

queria colocar um link pra melhor entendimento mas infelizmente não estou conseguindo conectar com servidor

 

vejam o código abaixo:

function mult_periodo_total(){//Pega os campos do formuláriovar Total = parseFloat(numBrToUsa(document.getElementById("total1").value));var Duracao = document.getElementById("duracao").value;//tratando o periodovar array_duracao = Duracao.split(" ");intPeriodo = array_duracao[0];strPeriodo = array_duracao[1];//Calculando o total do plano e parcela, Enviando o resultado.var TotalGeral = Total*intPeriodo;var valor2 = document.getElementById("parcela").value;var Parcela = TotalGeral/valor2;document.getElementById("total").value = FormataNumero(numUsaToBr(TotalGeral),2);document.getElementById("var_parc").value = FormataNumero(numUsaToBr(Parcela),2);var Inicio = document.getElementById("inicio").value;//tratando a data Iniciovar array_inicio = Inicio.split("/");var dia	dia = array_inicio[0]; var mes	mes = array_inicio[1]; var ano	ano = array_inicio[2];	var dataInicio = new Date(ano,mes,dia);//somando a data conforme periodo do plano para obeter a data finalfim = dataInicio;switch(strPeriodo){case "dia":fim += intPeriodo;return fim;breakcase "semana":fim += intPeriodo*7;return fim;breakcase "mês":fim += intPeriodo*30;return fim;breakcase "ano":fim += intPeriodo*365;return fim;}//Envia a Data Finaldiafim = fim.getDate();mesfim = fim.getMonth()+1;anofim = fim.getFullYear();document.getElementById("fim").value = "0"+diafim + "/" + "0"+mesfim + "/" + anofim;}

Testando a função vi que o erro está nete trecho do Switch e o motivo podem ser dois:

Em primeiro lugar: acho que o retorno do new Date() não está sendo adequado para somar com inteiros;

E segundo: tambem deve esta errado forma de somar na minha estrutura de controle.

switch(strPeriodo){case "dia":fim += intPeriodo;return fim;breakcase "semana":fim += intPeriodo*7;return fim;breakcase "mês":fim += intPeriodo*30;return fim;breakcase "ano":fim += intPeriodo*365;return fim;}

Ja tetei de tudo pesquisei a beça mas não consegui,

agora conto com vocês pra mais esta dica.

Desde já obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza Alexandre,Funcionou direitinho, mas só um detalhe vou v se consigo explica:Tenho a variavel intPeriodo que pego um inteiro (1, 2 , 3, 4, 5....)E a variavel strPeriodo que pegoto (dia, semana, mês, ano)fim = new Date(2007,07,03)si intPeriodo = 2 e strPerido = anofim += 2anosfim = 03/07/2009 esta seria a data de vencimento correta.mas só que da forma que estou fazendo abaixo estou retornandofim = 02/07/2009 si intPeriodo = 2fim = 01/07/2009 si intPeriodo = 5e os mesmo vale para mês. pois a meses de 28 - 29 - 30 e 31 diascase "ano":fim = new Date(fim.getTime() + intPeriodo*24*60*60*1000*365);desde ja obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho q essa diferença ocorre por causa dos anos bissextos

no caso de ano tenta o seguinte:

 

fim = new Date(fim.getYear() + 2, fim.getMonth(), fim.getDay());

Compartilhar este post


Link para o post
Compartilhar em outros sites

a solução não seria bem esta e se somo qualquer inteiro nesta forma apresentada acima o retorno é NaN.Mas o probelma é exatmente este ano bissextos e os meses.é que na minha formula acima eu encaro como todos os meses fossem de 30 dias. O que não é verdade!e que todos os anos são de 365 o que tambem não é verdade.e eu estou fazendo isto:Data atual + 2*365 aqui eu tenho um vencimento para daqui a 2 anos mas só que o dia do vencimento não será o mesma dia da data atual por causa do ano bissexto ex.: data atual 03/07/2007 vencimento 02/07/2009.a mesma coisa quando preciso somar meses a data atual: Data atual + 2*30 Os dois caso da uma diferenca no dia do vencimento, pois os meses não são todos de trinta dias:A solução seria esta, que não sei como fazer.03/07/2007 + 2meses = 03/09/200703/07/2007 + 2anos = 03/07/2009Obrigado pela sua força

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.