Javascript – Último dia do mês
Postado por: Luiz Paulo em 7 de julho de 2009Essa semana, eu precisei de uma solução em Javascript para encontrar o “último dia do mês” ou “quantidade de dias do mês” como preferir. Consultei o Google e encontrei algumas soluções, algumas delas mais simples e outras bem criativas.
Achei o assunto interessante e resolvi divulgar aqui para quem precisar utilizar.
Primeiro vou postar as soluções sérias para o pessoal que está pesquisando e precisa utilizar em seu código
Soluções simples
Exemplo longo (função):
function daysInMonth(month,year) {
var m = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
if (month != 2) return m[month - 1];
if (year % 4 != 0) return m[1];
if (year % 100 == 0 && year%400 != 0) return m[1];
return m[1] + 1;
}
Exemplo curto (função):
Aqui está a grande sacada do javaScript, que interpreta o 0(zero) como “o dia antes do dia primeiro” que obviamente é o último dia do mês anterior.
function daysInMonth(month,year) {
var dd = new Date(year, month, 0);
return dd.getDate();
}
Exemplo curto (inline):
var lastDay = (new Date(year, month, 0)).getDate();
Soluções criativas
Não se assustem, mas as soluções citadas abaixo funcionam!
Solução utilizando Switch:
function getLastDayOfMonth(month,year)
{
var day;
switch(month)
{
case 1 :
case 3 :
case 5 :
case 7 :
case 8 :
case 10:
case 12:
day = 31;
break;
case 4 :
case 6 :
case 9 :
case 11:
day = 30;
break;
case 2 :
if( ( (year % 4 == 0) && ( year % 100 != 0) ) || (year % 400 == 0) )
day = 29;
else
day = 28;
break;
}
return day;
}
Essa é legal
function anoBissexto(anoCompleto)
{
if(!(anoCompleto%4) && (anoCompleto%100 || !(anoCompleto%400))) return true;
return false;
}
function diasNoMes(mes,ano)
{
var var_type=typeof mes;
if(var_type != "number" && var_type != "string") return false;
if(var_type == "number" && (mes > 11 || mes =0) return dias[indice_eng];
if(indice_bra>=0) return dias[indice_bra];
return false;
}
else return dias[mes];
}
Façam bom proveito!











Não era mais simples pegar o primeiro dia do mês seguinte e retroceder um dia?
Luiz Paulo, legal, já havia visto estas dicas em seu blog.
Agora só uma frase que ficou meio confusa “…obviamente é o último dia do mês anterior”, não seria melhor omitir este pedaço?
Quando se coloca zero, sim, ele entende que é o dia antes do primeiro, mas do mesmo mês.
new Date(2009, 3, 0)
retornará um objeto Date referente à 31/03/2009 e não 28/02/2009.