2015-04-16 13 views
6

Chcę odliczać dni do określonego wydarzenia za pomocą funkcji instantjs, ale otrzymuję nieoczekiwany wynik.Oblicz dni, które mają upłynąć, aż do konkretnej daty z pasjansami

W dniu dzisiejszym, czyli 17 kwietnia, a data wydarzenia przypada na 14 maja, chcę, aby liczba dni wynosiła 27, jednak mój kod daje wynik 57. Co jest nie tak?

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

Po uruchomieniu 'console.log (eventdate.format());', to zwraca '" 2015-06-14T00: 00: 00-04: 00 "'. –

Odpowiedz

9

Tworząc obiekt momentowy za pomocą tablicy, należy wziąć pod uwagę, że miesiące, godziny, minuty, sekundy i milisekundy są zindeksowane. Lata i dni miesiąca są 1 zindeksowane. Ma to odzwierciedlić natywne parametry Date.

Reference

Więc albo zmienić miesiąca do 4 odzwierciedlać mogą lub analizowania datę jako ISO 8601 string

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

To dlatego, że miesiące są zerowane indeksowane. A więc 5 to właściwie czerwiec;)

+0

OK, to nie była odpowiedź, której oczekiwałem! A co z dniem i rokiem? –

+1

[Odnośnik] (http://momentjs.com/docs/#/parsing/array/) - "Ponieważ odzwierciedla to macierzyste parametry daty, miesiące, godziny, minuty, sekundy i milisekundy są zindeksowane przez zero. miesiąca są 1 zindeksowane. " –