Article image
Álvaro Emanuel
Álvaro Emanuel02/03/2023 21:54
Compartilhe

Como pegar a data final de cada mês com Javascript

  • #JavaScript
  • #TypeScript

Trabalhar com datas no Javascript nem sempre é uma tarefa fácil, muitas vezes ficamos confusos. No meu caso eu estou desenvolvendo uma aplicação de controle financeiro e uma questão me atormentou por algum tempo.

Uma das funcionalidades desse app seria a filtragem dos dados por uma data inicial e final. E o período padrão de data inicial e final dos dados é o mês vigente. Porém sabemos que cada mês pode ter uma duração diferente. Então me perguntei como que pego o dia final do mês sem escrever na mão? No fim cheguei a seguinte solução:

//Javascript
function monthLength(month, year) {
  return new Date(year, month + 1, 0).getDate();
};

//Typescript
function monthLength(month: number, year: number) {
  return new Date(year, month + 1, 0).getDate();
};

Explicação:

1 - A função recebe um mês e um ano:

  • Lembrando que no JS janeiro é 0 e dezembro 11, pense em um array de datas, ou seja, o primeiro mês está no índice 0 e o último no índice 11. Esse é um dos pontos mais confusos de se trabalhar com datas.

2 - Então instancio uma nova data passando o ano, o mês incrementado e 0 no lugar do dia:

  • O dia é 0, pois nós sabemos que não existe um dia 0, assim o JS retorna a data anterior do primeiro dia do próximo mês, que é o último dia do mês atual.
  • Baseado nessa lógica do dia 0 descrita acima que nós incrementamos o mês, pois o Javascript vai usar o próximo mês na operação.
  • Exemplo:
  • 😙 Ei Javascript me retorna o dia da data 00/02/2023!
  • 😅 Opa amigo não existe dia 0, vou te retornar o último dia do mês anterior a essa data que é 31/01/2023.
  • 😃 Beleza meu parceiro!

3 - Por fim chamamos o método getDate() que nos retorna o que queremos.

Exemplo

//Vamos supor que queremos o último dia de Fevereiro que é o mais diferente
//Nós passamos os argumentos 1 (Month - Mês) e 2023 (Year - Ano)

console.log(monthLength(1, 2023)); //Saída: 28

Pronto essa foi a solução que achei, pode não ser a melhor ou a mais rápida, porém funcionou. Peço que se souber uma forma melhor deixe no comentário, e me dê um feedback se gostou dessa explicação! 👋🏻

Compartilhe
Comentários (1)

ES

Esequias Souza - 03/03/2023 09:12

Vou estudar a respeito