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! 👋🏻