227 votes

getMonth en javascript donne le mois précédent

J'utilise un afficheur 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, cela 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 de mal ?

441voto

Rahul Tripathi Points 1

Parce que getmonth() à partir de 0. Vous pouvez souhaiter que d1.getMonth() + 1 pour obtenir ce que vous voulez.

31voto

letiagoalves Points 5411

getMonth() est basée sur l'indexation zéro. Vous devez faire d1.getMonth() + 1

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

26voto

un5t0ppab13 Points 55

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 c'est .getDate() PAS . getDay()

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

J'espère que cela vous aidera

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

5voto

Murad Points 61
const d = new Date();
const time = d.toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', second:'numeric', hour12: true });
const date = d.toLocaleString('en-US', { day: 'numeric', month: 'numeric', year:'numeric' });

OU

const full_date = new Date().toLocaleDateString(); //Date String
const full_time = new Date().toLocaleTimeString(); // Time String

Sortie

Date = 8/13/2020

Temps = 12:06:13 AM

1voto

Baron Young Points 125

Oui, il semble que ce soit une décision stupide de la part de quelqu'un de faire en sorte que le mois soit indexé à zéro alors que l'année et le jour ne le sont pas. Voici une petite fonction que j'utilise pour convertir une date dans le format attendu pour le champ...

const now = new Date()
const month = (date) => {
    const m = date.getMonth() + 1;
    if (m.toString().length === 1) {
        return `0${m}`;
    } else {
        return m;
    }
};
const day = (date) => {
    const d = date.getDate();
    if (d.toString().length === 1) {
        return `0${d}`;
    } else {
        return d;
    }
};

const formattedDate = `${now.getFullYear()}-${month(now)}-${day(now)}`

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X