getMonth in javascript offre il mese scorso


139

Sto usando un datepicker che dà una data nel formato dom 7 lug 00:00:00 EDT 2013. Anche se il mese dice luglio, se faccio getMonth, mi dà il mese precedente.

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

Che cosa sto facendo di sbagliato?


14
Sì ... è zero indicizzato .
Emissario,

2
Non perdere la testa con le date in javascript. Usa Moment.js se puoi
Valamas,

6
non riesco a credere quanto sia reale
neaumusic

Moment.js non può eseguire correttamente DateDiffs. Va bene se stai facendo dateDiffs nello stesso mese, ma prova a farlo in 2 mesi diversi (cioè 27-04-2018 e 24-05-2018) ed è una giornata fuori.
rozza,

1
Aspetta di provare getYear()!! ;-)
James Poulose,

Risposte:


266

Perché getmonth () inizia da 0. Potrebbe essere d1.getMonth() + 1necessario ottenere ciò che si desidera.


195
Devo dire che avere un numero zero di un mese indicizzato è la cosa più stupida che abbia mai visto da un po '. '
LarryBud,

5
perché qualcuno lo vorrebbe basato su 0 se getDate dà 1-31?
Abhinav Gauniyal

6
Molto probabilmente dovrai farlo d1.getMonth() < 12 ? d1.getMonth() + 1 : 1, altrimenti dicembre sarebbe il 13, no?
DanielKhan,

7
@DanielKhan No, perché dicembre sarebbe l'11, quindi l'aggiunta di 1 ad esso lo renderebbe correttamente 12. La funzione getMonth () non dovrebbe mai restituire un valore superiore a 11.
unenthusiasticuser

7
@LarryBud, il ragionamento è probabilmente quello contrario ad altre parti della data (giorno del mese, anno, ore, minuti, secondi ...) che sono sempre usate come numeri così come sono, il mese viene spesso convertito in testo, usando una matrice di nomi, che ovviamente si basa su 0. Era già il caso delle librerie C standard, che devono avere più di 40 anni.
Jcaron,

19

getMonth()la funzione è zero indicizzata in base. Devi fared1.getMonth() + 1

Recentemente ho usato la libreria Moment.js e non ho mai guardato indietro. Provalo!


10

Presumendo che tu usi la tua variabile

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

Il mese richiede un +1 per essere precisi, inizia a contare da 0

d1.getMonth() + 1 // month 

Al contrario .... questi metodi NON hanno bisogno di un segno più 1

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

E nota che .getDate()NON lo è .getDay()

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

Spero che questo ti aiuti

Sospetto che questi metodi manchino di coerenza per ragioni storiche

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.