lebendig
lebendig

Reputation: 63

Moment.js: duration shows incorrect result

It is necessary to calculate a time interval between two moments and show it in format {... years ... months ... days ... hours ... minutes}. I use the following code:

var start = moment("2016-05-04 13:00:00");
var end = moment("2018-05-04 13:00:00");
var diff = moment(end).diff(start);
var duration = moment.duration(diff);

var years = duration.years();
var months = duration.months();
var days = duration.days();
var hours = duration.hours();
var minutes = duration.minutes();

console.log(years + " years " +
            months + " months " +
            days + " days " + 
            hours + " hours " + 
            minutes + " minutes ");
<script src="https://momentjs.com/downloads/moment.js"></script>

I expect result "2 years 0 months 0 days 0 hours 0 minutes", but it is "1 years 11 months 29 days 0 hours 0 minutes". Please, tell me what is the problem?

Upvotes: 2

Views: 973

Answers (2)

lebendig
lebendig

Reputation: 63

Maybe it will be useful for someone else. The next code (from answer Moment.js - Get difference in two birthdays in years, months and days) helped to solve the problem:

var start = moment("2016-05-04 13:00:00");
var end = moment("2018-05-04 13:00:00");

var years = end.diff(start, 'year');
start.add(years, 'years');
var months = end.diff(start, 'months');
start.add(months, 'months');
var days = end.diff(start, 'days');
start.add(days, 'days');
var hours = end.diff(start, 'hours');
start.add(hours, 'hours');
var minutes = end.diff(start, 'minutes');

console.log(years + " years " +
            months + " months " +
            days + " days " + 
            hours + " hours " + 
            minutes + " minutes ");
<script src="https://momentjs.com/downloads/moment.js"></script>

It works with other dates too.

Upvotes: 1

Koushik Reddy U
Koushik Reddy U

Reputation: 188

this is because 2016 is a leap year. it is kind of a bug at moment, and they have a fix for it in this link. Please go through it for the year diff calculation.

Upvotes: 4

Related Questions