Highly Irregular
Highly Irregular

Reputation: 40539

Calculate days to go until a particular date with momentjs

I want to count down the days until a particular event using momentjs but I'm getting an unexpected result.

With today's date being 17th April, and the event date being 14th May, I want the resulting number of days to be 27, however my code gives me a result of 57. What's wrong?

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

Upvotes: 23

Views: 22611

Answers (3)

Chris Owens
Chris Owens

Reputation: 5296

Just to add for anyone else that comes across this - there's actually a helper that does the phrasing etc for you:

https://momentjs.com/docs/#/displaying/to/

/* Retrieve a string describing the time from now to the provided date */
daysUntil: function(dateToCheckAgainst){
    return new moment().to(moment(dateToCheckAgainst));
}

// Sample outputs
"in three months"
"in two months"
"in 25 days"

Upvotes: 5

Bart Jedrocha
Bart Jedrocha

Reputation: 11570

When creating a moment object using an array, you have to take note that months, hours, minutes, seconds, and milliseconds are all zero indexed. Years and days of the month are 1 indexed. This is to mirror the native Date parameters.

Reference

So either change the month to 4 to reflect May or parse the date as an ISO 8601 string

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

Upvotes: 50

Tiago Fael Matos
Tiago Fael Matos

Reputation: 2077

That's because months are zero indexed. So 5 is actually June ;)

Upvotes: 3

Related Questions