getMonth en javascript donne le mois dernier

139

J'utilise un sélecteur de date qui donne une date au format Sun Jul 7 00:00:00 EDT 2013. Même si le mois indique juillet, si je fais un getMonth, il me donne le mois précédent.

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

Qu'est-ce que je fais mal?

développeur747
la source
14
Oui ... c'est zéro indexé .
Emissary le
2
Ne perdez pas la tête avec les dates en javascript. Utilisez Moment.js si vous le pouvez
Valamas
6
Je ne peux pas croire à quel point c'est réel
neaumusic
Moment.js ne peut pas faire dateDiffs correctement. Ce n'est pas grave si vous faites des dateDiffs dans le même mois, mais essayez de le faire sur 2 mois différents (c'est-à-dire 27-04-2018 et 24-05-2018) et c'est une journée.
rozza
1
Attendez d'essayer getYear()!! ;-)
James Poulose

Réponses:

266

Parce que getmonth () commence à 0. Vous voudrez peut-être d1.getMonth() + 1obtenir ce que vous voulez.

Rahul Tripathi
la source
195
Je dois dire que l'indexation d'un numéro de mois zéro est la chose la plus stupide que j'ai vue depuis un moment. '
LarryBud
5
pourquoi quelqu'un le voudrait-il 0 basé si getDate donne 1-31?
Abhinav Gauniyal
6
Vous devrez probablement le faire d1.getMonth() < 12 ? d1.getMonth() + 1 : 1- sinon le 13 décembre serait le 13, non?
DanielKhan
7
@DanielKhan Non, parce que décembre serait 11, donc l'ajout de 1 en ferait correctement 12. La fonction getMonth () ne devrait jamais retourner une valeur supérieure à 11.
unenthusiasticuser
7
@LarryBud, le raisonnement est probablement que contrairement aux autres parties de la date (jour du mois, année, heures, minutes, secondes ...) qui sont toujours utilisées comme des nombres comme elles le sont, le mois est souvent converti en texte, en utilisant un tableau de noms, qui est bien sûr basé sur 0. C'était déjà le cas dans les bibliothèques standard C, qui doivent avoir plus de 40 ans.
jcaron
19

getMonth()La fonction est indexée à zéro. Tu as besoin de faired1.getMonth() + 1

Récemment, j'ai utilisé la bibliothèque Moment.js et je n'ai jamais regardé en arrière. Essayez-le!

Letiagoalves
la source
10

En supposant que vous utilisez votre variable

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

Le mois nécessite un +1 pour être précis, il commence à compter à 0

d1.getMonth() + 1 // month 

En revanche ... ces méthodes n'ont PAS besoin d'un plus 1

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

Et remarquez que ce n'est .getDate()PAS le cas.getDay()

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

J'espère que cela t'aides

Je soupçonne que ces méthodes manquent de cohérence pour des raisons historiques

Jasonleonhard
la source