getMonth em javascript dá no mês passado


139

Estou usando um datepicker que fornece uma data no formato dom 7 de julho 00:00:00 EDT 2013. Mesmo que o mês diga julho, se eu fizer um getMonth, ele me fornecerá o mês anterior.

var d1 = new Date("Sun Jul 7 00:00:00 EDT 2013");
d1.getMonth());//gives 6 instead of 7

O que estou fazendo de errado?


14
Sim ... é zero indexado .
emissário

2
Não perca a cabeça com datas em javascript. Use Moment.js se puder
Valamas

6
Eu não posso acreditar o quão real isso é
neaumusic

Moment.js não pode executar o dateDiffs corretamente. Tudo bem se você estiver fazendo dateDiffs no mesmo mês, mas tente fazê-lo em 2 meses diferentes (ou seja, 27-04-2018 e 24-05-2018) e é um dia de folga.
Rozza

1
Espere até você tentar getYear()!! ;-)
James Poulose 17/02

Respostas:


266

Como getmonth () começa em 0. Você pode ter d1.getMonth() + 1que alcançar o que deseja.


195
Eu tenho que dizer, ter um número de mês zero indexado é a coisa mais idiota que já vi há algum tempo. '
LarryBud

5
por que alguém iria querer 0 com base se getDate fornece 1-31?
Abhinav Gauniyal

6
Muito provavelmente você terá que fazer d1.getMonth() < 12 ? d1.getMonth() + 1 : 1- caso contrário, dezembro seria 13, não?
DanielKhan

7
@DanielKhan Não, porque dezembro seria 11, assim que adicionar 1 a seria corretamente fazer a função que 12. O getMonth () não deve nunca retornar um valor mais de 11.
unenthusiasticuser

7
@LarryBud, o raciocínio é provavelmente o contrário de outras partes da data (dia do mês, ano, horas, minutos, segundos ...) que sempre são usadas como números, o mês é frequentemente convertido em texto, usando uma matriz de nomes, que é obviamente baseada em 0. Já era o caso das bibliotecas padrão C, que devem ter mais de 40 anos.
jcaron

19

getMonth()A função é zero indexada com base. Você precisa fazerd1.getMonth() + 1

Recentemente, usei a biblioteca Moment.js e nunca olhei para trás. Tente!


10

Presumindo que você use sua variável

var d1 = new Date("Sun Jul 7 00:00:00 EDT 2013");

O mês requer que o +1 seja preciso, ele começa a contar em 0

d1.getMonth() + 1 // month 

Por outro lado .... esses métodos NÃO precisam de mais 1

d1.getSeconds()   // seconds 
d1.getMinutes()   // minutes 
d1.getDate()      // date    

E observe que .getDate()NÃO é .getDay()

d1.getDay()       // day of the week as a 

Espero que isto ajude

Suspeito que esses métodos não tenham consistência por razões históricas

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.