Ir para conteúdo

POWERED BY:

evandrofelipe

somar meses a uma data em javascript

Recommended Posts

boa tarde pessoal!

 

eu não entendo muito de javascript.

eu preciso informar uma data e somar n meses a ela prevendo inclusive que a nova data pode cair em um próximo ano.

 

depois de algumas pesquisas fiz o abaixo, mas não funcionou:

function calculadata() {  
var data = new Date(document.getElementById("cdata1").value);

data.setMonth(data.getMonth() + document.getElementById("cparcela").value);

var minhaData = data.getDate() + '/' + data.getMonth() + '/' + data.getFullYear();
document.getElementById("cdata2").value = minhaData;

}

 

agradeço desde já a ajuda.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom eu nunca mexi com datas para uma aplicação com javascript, pelo fato que a data é definida pelo hardware do usuário, ou seja se ele estiver com a data errada pode trazer diversos problemas se for usado em validação com como informação, é essencial usar algo no servidor.

Mas pelo que me lembro da época que estudei a respeito isso aqui já deveria apresentar o resultado esperado:

10 horas atrás, evandrofelipe disse:

data.setMonth(data.getMonth() + document.getElementById("cparcela").value);

No entanto o value de um input é sempre STRING então converta para inteiro usando a função parseInt();

 

O problema que vejo e não entendo a necessidade é de calcular de uma data específica ao invés da data atual.

Resolvi brincar aqui e consegui usando dois objetos da função date();

Bastando eu definir uma data inicial em um objeto e definindo o final no outro.

var dataA = new Date();
var dataB = new Date();
            
dataA.setYear(2020); // Definindo o ano de início
dataA.setMonth(10); // Definindo o mês de início

dataB.setMonth(dataA.getMonth() + 12); // Calculando os meses com relação a data anterior

var resultado = dataB.getDate() + '/' + dataB.getMonth() + '/' + dataB.getFullYear();
console.log(resultado);

Mas como disse, se vai usar esse tipo de informação para registro está cometendo um grave erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala amigo. Obrigado pela resposta.

Fiz o teste com o que postou e funcionou.

Creio que atenda a sua necessidade, mas não ficou dentro do que preciso.

E não há nada de errado em somar parcelas a uma data inicial de um contrato e o sistema calcular automaticamente a data do término do contrato. Talvez o erro maior seja opinar sem ter conhecimento do projeto. É sempre mais interessante focar na resolução do problema.

Agradeço ao amigo Jack por ter me ajudado dentro do problema que tinha.

De qualquer forma, obrigado novamente. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Outra opção seria usar uma lib especifica para manipulação de datas caso essa manipulação possa ficar mais ampla, assim terá um suporte maior, envolvendo dias, mês, ano e locale caso precise tratar dados com fuso horário diferente, e mais simples de manipular formatos diferentes como timestamps.

 

uma delas é o day.js

url cdn:https://cdnjs.cloudflare.com/ajax/libs/dayjs/1.9.1/dayjs.min.js

// Acresncentando Meses
console.log(dayjs().add(2, 'month').format('DD-MM-YYYY'));

// Acrescentando Dias
console.log(dayjs('2020-10-12').add(5, 'day').format('DD-MM-YYYY'));

link JSbin: https://jsbin.com/negavetove/edit?html,js,console

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 09/10/2020 at 20:36, wanderval disse:

Outra opção seria usar uma lib especifica para manipulação de datas caso essa manipulação possa ficar mais ampla, assim terá um suporte maior, envolvendo dias, mês, ano e locale caso precise tratar dados com fuso horário diferente, e mais simples de manipular formatos diferentes como timestamps.

 

uma delas é o day.js

url cdn:https://cdnjs.cloudflare.com/ajax/libs/dayjs/1.9.1/dayjs.min.js


// Acresncentando Meses
console.log(dayjs().add(2, 'month').format('DD-MM-YYYY'));

// Acrescentando Dias
console.log(dayjs('2020-10-12').add(5, 'day').format('DD-MM-YYYY'));

link JSbin: https://jsbin.com/negavetove/edit?html,js,console

 

 

Obrigado Walderval!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×

Informação importante

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