getMonth en javascript da el mes pasado


139

Estoy usando un selector de fechas que da una fecha en el formato dom 7 de julio 00:00:00 EDT 2013. Aunque el mes dice julio, si hago un mes, me da el mes anterior.

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

¿Qué estoy haciendo mal?


14
Sí ... es cero indexado .
Emisario

2
No pierdas la cabeza con las fechas en javascript. Usa Moment.js si puedes
Valamas

66
No puedo creer lo real que es esto
neaumusic

Moment.js no puede hacer dateDiffs correctamente. Está bien si estás haciendo DateDiffs dentro del mismo mes, pero trata de hacerlo en 2 meses diferentes (es decir, 27-04-2018 y 24-05-2018) y es un día fuera.
rozza

1
¡Espera hasta que lo intentes getYear()! ;-)
James Poulose

Respuestas:


266

Porque getmonth () comienza desde 0. Es posible que desee tener d1.getMonth() + 1que lograr lo que desea.


195
Debo decir que tener un mes número cero indexado es lo más tonto que he visto en mucho tiempo. '
LarryBud

55
¿Por qué alguien querría que sea 0 si getDate da 1-31?
Abhinav Gauniyal

66
Lo más probable es que tengas que hacerlo d1.getMonth() < 12 ? d1.getMonth() + 1 : 1; de lo contrario, diciembre sería el 13, ¿no?
DanielKhan

77
@DanielKhan Nope, porque diciembre sería 11, por lo que agregar 1 sería correctamente 12. La función getMonth () nunca debería devolver un valor superior a 11.
usuario poco entusiasta

77
@LarryBud, el razonamiento es probablemente contrario a otras partes de la fecha (día del mes, año, horas, minutos, segundos ...) que siempre se usan como números, el mes a menudo se convierte en texto, usando una matriz de nombres, que por supuesto está basada en 0. Ya era el caso en las bibliotecas estándar de C, que deben tener más de 40 años.
jcaron

19

getMonth()la función está basada en cero indexado. Necesitas hacerd1.getMonth() + 1

Recientemente utilicé la biblioteca Moment.js y nunca miré hacia atrás. ¡Intentalo!


10

Suponiendo que use su variable

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

El mes requiere un +1 para ser exacto, comienza a contar en 0

d1.getMonth() + 1 // month 

Por el contrario ... estos métodos NO necesitan un plus 1

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

Y note que .getDate()NO lo es .getDay()

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

Espero que esto ayude

Sospecho que estos métodos carecen de consistencia por razones históricas

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.