Neste post irei falar sobre cálculo de datas utilizando javascript.
O javascript tem um objeto Date que é muito fácil de se trabalhar, basta instancia-lo da seguinte forma:
var data = new Date(ano, mes, dia)
Lembrando que o mês deve ser um Inteiro de 0 a 11 (Janeiro a Dezembro).
Também podemos utilizar os métodos do objeto date da seguinte forma:
var data = new Date(); data.setMonth(0); // Janeiro data.setFullYear(2010); data.setDate(1);
Esta data seria 01/01/2010! 🙂
Agora para somar dias/meses/anos a sua data fariamos assim:
data.setDate(data.getDate() + 5); // Adiciona 5 dias data.setMonth(data.getMonth() + 2); // Adiciona 2 meses data.setFullYear(data.getFullYear() + 1) // Adiciona 1 ano
Ps: Lembre-se de sempre utilizar Inteiros para as somas, se necessário fazer um cast utilizando parseInt();
Sendo assim para alterar a data 01/01/2010 para 05/10/2011 fazemos o seguinte:
var data = new Date(2010,0,1); data.setDate(data.getDate() + 4); data.setMonth(data.getMonth() + 9); data.setFullYear(data.getFullYear() + 1); [/javascrit] Para escrever a sua data basta utilizar os métodos getFullYear(), getMonth() e getDate() var minhaData = data.getDate() + '/' + data.getMonth() + '/' + data.getFullYear(); alert(minhaData);
O amigo Lucas (@lucasmezencio) me deu a dica sobre velocidade no javascript, para concatenar strings é muito mais rápido dar um join em um array do que concatenar utilizando o +
então ficaria assim >
var minhaData = [data.getDate(), '/', data.getMonth(), '/', data.getFullYear()],join('');
Para saber mais sobre performance no javascript, você pode conferir no google.
http://code.google.com/intl/pt-BR/speed/articles/optimizing-javascript.html
Uma dúvida: na hora de somar dias/meses/anos numa data, o objeto retornado pelo Javascript será uma data válida de acordo com o nosso calendário, ou, por exemplo, se adicionarmos 10 dias a data 25/10/2010, a data resultante será 35/10/2010?
Valeu!
Será uma data válida! essa é a vantagem do objeto Date(), ao somar 10 dias a data seria 04/11/2010 !
Seria legal colocar isso no post então :).
Achei que ficava explícito! mas obrigado pela sugestão!
Muito bacana o artigo, William!!
E valeu pelos créditos!! =P
Precisando, estamos sempre aí.. (agora EU é que preciso criar vergonha na cara e voltar com a atividade do meu blog.. :~~
Dá para “simplificar” um pouco mais o join().
var minhaData = [data.getDate(), data.getMonth(), data.getFullYear()].join(‘/’);
🙂
Wow! verdade, mto bom! 😀
Bom dia,
Fiz alguns testes e o javascript não trata os dias de uma mês, pelo que percebi me parece que ele trata os meses todos como tendo 30 dias, isso altera o resultado. Ex: ao somar 364 dias ao dia 01/02/2016 o retorno é 28/01/2017.
Existe alguma função padrão , método que some datas? Ou realmente meu resultado esta errado?
Att.