Tenho usado essa função, mas gostaria de saber qual é a maneira mais eficiente e precisa de obtê-la.
function daysInMonth(iMonth, iYear) {
return 32 - new Date(iYear, iMonth, 32).getDate();
}
javascript
date
Chatu
fonte
fonte
return new Date(year, month + 1, 0).getDate();
var d=new Date();d.setFullYear(year, month, date);
.month
for 12 ? ODate
construtor não deveria ter um valor de 0 a 11 ?Se você chamar essa função com frequência, pode ser útil armazenar o valor em cache para melhor desempenho.
Aqui está a versão em cache da resposta do FlySwat :
fonte
Date
(portanto, não há uma resposta universal para essa pergunta) e da frequência com que seu código chamará odayInMonth
com os mesmos valores. Portanto, a única resposta sensata é: analise o seu código e faça um benchmark!cache
, eu usolocalStorage
.Algumas respostas (também em outras questões) tiveram problemas de ano bissexto ou usaram o objeto Data. Embora o javascript
Date object
cubra aproximadamente 285616 anos (100 milhões de dias) em ambos os lados de 1º de janeiro de 1970, eu estava farto de todos os tipos de inconsistências de data inesperadas em diferentes navegadores (principalmente do ano 0 a 99). Também estava curioso para saber como calculá-lo.Então eu escrevi um algoritmo simples e, acima de tudo, pequeno para calcular o número correto de dias ( Proléptico Gregoriano / Astronômico / ISO 8601: 2004 (cláusula 4.3.2.1), então ano
0
existe e é um ano bissexto e anos negativos são suportados ) número de dias para um determinado mês e ano.Ele usa o algoritmo bitmask-módulo leapYear de curto-circuito (ligeiramente modificado para js) e o algoritmo comum mod-8 meses.
Observe que, em
AD/BC
notação, o ano 0 AD / BC não existe: em vez disso, o ano1 BC
é o ano bissexto!SE você precisar contabilizar a notação BC, simplesmente subtraia um ano do valor do ano (caso contrário positivo) primeiro !! (Ou subtraia o ano
1
para cálculos de ano adicionais.)Nota, os meses devem ser baseados em 1!
Observe, este é um algoritmo diferente da pesquisa de número mágico que usei no meu Javascript para calcular o dia do ano (1 - 366) , porque aqui o ramo extra para o ano bissexto é necessário apenas para fevereiro.
fonte
Para tirar a confusão, eu provavelmente faria a string do mês com base, pois atualmente é baseada em 1.
fonte
Com moment.js, você pode usar o método daysInMonth ():
fonte
Aqui vai
fonte
Sintaxe ES6
retorna
fonte
fonte
Considerando os anos bissextos:
fonte
Cálculo direto de uma linha (sem objeto Date):
Variação com meses baseados em 0:
fonte
Se você quiser o número de dias no mês atual de um objeto Date, considere o seguinte método:
Então você pode executá-lo assim:
fonte
Em uma única linha:
fonte
Pode ser um pouco matador em comparação com a resposta selecionada :) Mas aqui está:
Encontrei o código acima aqui: https://github.com/ElemeFE/element/blob/dev/src/utils/date-util.js
Encontrei o código acima aqui: https://github.com/datejs/Datejs/blob/master/src/core.js
fonte
Se você vai passar uma variável de data, isso pode ser útil
fonte
Talvez não seja a solução mais elegante, mas fácil de entender e manter; e é testado em batalha.
fonte