Javascript – Calculando Datas

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

8 Comentários

  1. 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!

  2. 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.. :~~

  3. Dá para “simplificar” um pouco mais o join().

    var minhaData = [data.getDate(), data.getMonth(), data.getFullYear()].join(‘/’);

    🙂

  4. Joao Souzasays:

    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.

Deixe um comentário

Por favor, seja educado. Seu e-mail não será publicado e os campos obrigatórios estão marcados.