2015-04-16 13 views
6

Voglio contare i giorni fino a un evento particolare utilizzando momentjs ma sto ottenendo un risultato inaspettato.Calcola giorni per andare fino a una data specifica con momenti

Con data odierna al 17 aprile e data dell'evento il 14 maggio, voglio che il numero di giorni risultante sia 27, tuttavia il mio codice mi dà un risultato di 57. Cosa c'è che non va?

function daysRemaining() { 
    var eventdate = moment([2015, 5, 14]); 
    var todaysdate = moment(); 
    return eventdate.diff(todaysdate, 'days'); 
} 
alert(daysRemaining()); 
+1

Se si esegue 'console.log (eventdate.format());', si restituisce '" 2015-06-14T00: 00: 00-04: 00 "'. –

risposta

9

Quando si crea un oggetto momento utilizzando un array, è necessario tenere presente che mesi, ore, minuti, secondi e millisecondi sono tutti indicizzati a zero. Gli anni e i giorni del mese sono 1 indicizzati. Questo è per rispecchiare i parametri nativi Date.

Reference

Quindi, o cambiare il mese al 4 maggio per riflettere o analizzare la data come ISO 8601 string

function daysRemaining() { 
    var eventdate = moment("2015-05-14"); 
    var todaysdate = moment(); 
    return eventdate.diff(todaysdate, 'days'); 
} 
alert(daysRemaining()); 
3

Ecco perché i mesi sono indicizzati a zero. Quindi 5 è in realtà giugno;)

+0

Ok, non era la risposta che mi aspettavo! Che mi dici del giorno e dell'anno? –

+1

[Riferimento] (http://momentjs.com/docs/#/parsing/array/) - "Poiché rispecchia i parametri di data nativi, i mesi, le ore, i minuti, i secondi ei millisecondi sono tutti indicizzati a zero. Anni e giorni del mese sono 1 indicizzati. " –

Problemi correlati