Se você fornecer 0
como a dayValue
em Date.setFullYear
que você começa o último dia do mês anterior:
d = new Date(); d.setFullYear(2008, 11, 0); // Sun Nov 30 2008
Há referência a esse comportamento no mozilla . Esse é um recurso confiável entre navegadores ou devo procurar métodos alternativos?
javascript
date
Ken
fonte
fonte
Respostas:
As diferenças de saída são devidas a diferenças na
toString()
implementação, não porque as datas são diferentes.Obviamente, apenas porque os navegadores identificados acima usam 0 como o último dia do mês anterior não significa que eles continuarão a fazê-lo ou que os navegadores não listados o farão, mas isso dá credibilidade à crença de que ele deve funcionar de maneira adequada. da mesma maneira em todos os navegadores.
fonte
new Date
é por isso muito mais lento do que outros métodos de cálculo que nem sequer aparecem no gráfico perf : jsperf.com/days-in-month-perf-test/6Eu usaria uma data intermediária no primeiro dia do mês seguinte e retornaria a data do dia anterior:
fonte
today = new Date(); new Date(today.getFullYear(), today.getMonth()+1, 0).toString();
Acho que essa é a melhor solução para mim. Deixe o objeto Data calculá-lo para você.
Definir o parâmetro day como 0 significa um dia a menos que o primeiro dia do mês, que é o último dia do mês anterior.
fonte
new Date
é assim muito mais lento que nem sequer aparecem no gráfico perf : jsperf.com/days-in-month-perf-test/6Em termos de computador,
new Date()
e asregular expression
soluções são lentas! Se você deseja uma linha única super-rápida (e super-enigmática), tente esta (assumindo quem
esteja noJan=1
formato). Continuo tentando diferentes alterações de código para obter o melhor desempenho.Minha versão mais rápida atual :
Depois de analisar esta questão relacionada , verificar o ano bissexto usando operadores bit a bit (velocidade incrível) e descobrir o que os números mágicos 25 e 15 representavam, eu vim com esse híbrido otimizado de respostas:
Dada a mudança de bits, isso obviamente pressupõe que seus parâmetros
m
&y
são números inteiros, pois a passagem de números e seqüências de caracteres resultaria em resultados estranhos.JSFiddle: http://jsfiddle.net/TrueBlueAussie/H89X3/22/
Resultados do JSPerf: http://jsperf.com/days-in-month-head-to-head/5
Por alguma razão,
(m+(m>>3)&1)
é mais eficiente do que(5546>>m&1)
em quase todos os navegadores.A única competição real de velocidade é do @GitaarLab, então eu criei um JSPerf frente a frente para testarmos: http://jsperf.com/days-in-month-head-to-head/5
Funciona com base na minha resposta do ano bissexto aqui: javascript para encontrar o ano bissexto esta resposta aqui Verifique o ano bissexto usando operadores bit a bit (velocidade incrível) , bem como a seguinte lógica binária.
Uma rápida lição em meses binários:
Se você interpretar o índice dos meses desejados (Jan = 1) em binário , notará que meses com 31 dias têm o bit 3 claro e o bit 0 definido ou o bit 3 definido e o bit 0 limpo.
Isso significa que você pode mudar o valor 3 lugares com
>> 3
, XOR os bits com o original^ m
e ver se o resultado está1
ou0
na posição de bit 0 usando& 1
. Nota: Acontece que+
é um pouco mais rápido que XOR (^
) e(m >> 3) + m
fornece o mesmo resultado no bit 0.Resultados do JSPerf : http://jsperf.com/days-in-month-perf-test/6
fonte
:)
A primeira versão-resposta que publiquei tinha, de fato, um conjunto desnecessário de colchetes, que foram removidos (pelos quais eu creditei a você) para que pudéssemos raspar um personagem e terminar com esse. Ainda estou grato por esse dia divertido, felicidades!y
e asm
variáveis devem ser inteiras e não string! Isso causa cálculos errados, por exemplo, para fevereiro, retorna 30. Eu tive que usar aparseInt()
função para fazê-la funcionar.Meu colega encontrou o seguinte, que pode ser uma solução mais fácil
roubado de http://snippets.dzone.com/posts/show/2099
fonte
Uma leve modificação na solução fornecida pelo lebreeze :
fonte
return new Date(iYear, 1 + iMonth, 0).getDate();
equivalente à solução do @ lebreeze.Recentemente, tive que fazer algo semelhante, foi o que descobri:
Passe-o em uma data e retornará uma data definida para o início do mês ou para o final do mês.
A
begninngOfMonth
função é bastante autoexplicativa, mas o que está acontecendo naendOfMonth
função é que eu estou incrementando o mês para o próximo mês e depois usandosetDate(0)
para reverter o dia para o último dia do mês anterior, que faz parte do especificação setDate:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setDate https://www.w3schools.com/jsref/jsref_setdate.asp
Em seguida, defino a hora / minutos / segundos para o final do dia, para que, se você estiver usando algum tipo de API que esteja esperando um período, possa capturar a totalidade desse último dia. Essa parte pode ir além do que a postagem original está solicitando, mas pode ajudar alguém a procurar uma solução semelhante.
Editar: você também pode percorrer uma milha extra e definir milissegundos
setMilliseconds()
se quiser ser mais preciso.fonte
tente este.
exemplo:
resultado:
fonte
Isso funciona para mim. Fornecerá o último dia do ano e mês especificado:
fonte
Este funciona bem:
fonte
Isso fornecerá o mês atual, primeiro e último dia.
Se você precisar alterar 'ano', remova d.getFullYear () e defina seu ano.
Se você precisar alterar 'month', remova d.getMonth () e defina seu ano.
fonte
Tente o seguinte:
fonte
A função abaixo fornece o último dia do mês:
Da mesma forma, podemos obter o primeiro dia do mês:
fonte
fonte
fonte
defina o mês que você precisa namorar e, em seguida, defina o dia como zero, para que o mês comece na função de data de 1 a 31 e obtenha o último dia
fonte
Aqui está uma resposta que economiza GMT e hora da data inicial
fonte
Eu sei que é apenas uma questão de semântica, mas acabei usando-a desta forma.
Como as funções são resolvidas a partir do argumento interno, externamente, ele funciona da mesma maneira.
Você pode substituir o ano e o mês / ano pelos detalhes necessários, seja a partir da data atual. Ou um determinado mês / ano.
fonte
Se você precisar do final exato do mês em milissegundos (por exemplo, em um carimbo de data / hora):
fonte