## Sunday, March 29, 2015

### JavaScript DateDiff

Recently I got a requirement to find the difference between two dates. I want to result as the number of years, months and days between the two dates. Further I am interested in the calendar difference that considers months with 28, 29, 30 and 31 days. For example the difference between Jan 28th, 2015 and Mar 29th, 2015 is 0 years, 2 months and 1 day.

Obviously there is no out of box function and I could not find a simple library that does what I need. In c# and other server side languages this functionality is already available.

I wrote a small function which calculates the difference between two dates. To simplify my calculations I used moment.js. As you know moment.js is a very good date library

Here is my function which returns the DateDiff between two dates:

function dateDiff(startdate, enddate) {

//define moments for the startdate and enddate
var startdateMoment = moment(startdate);
var enddateMoment = moment(enddate);

if (startdateMoment.isValid() === true && enddateMoment.isValid() === true) {

//getting the difference in years
var years = enddateMoment.diff(startdateMoment, 'years');

//moment returns the total months between the two dates, subtracting the years
var months = enddateMoment.diff(startdateMoment, 'months') - (years * 12);

//to calculate the days, first get the previous month and then subtract it
var days = enddateMoment.diff(startdateMoment, 'days')

return { years: years, months: months, days: days };
}
}

The output of the function is a javascript object containing years, months and days elapsed between the two dates

Here is the Plunker for this
http://plnkr.co/edit/YovdOb?p=preview

Update: I enhanced this function to include Hours, Minutes and Seconds. Please see my updated blog on this
http://www.spaprogrammer.com/2016/03/javascript-datediff.html