0
var oldDate =  moment('Tue May 20 2008 00:00:00 GMT+0530 (IST)');
var now = new moment();
var years = now.diff(oldDate,'years');

In console am getting only years.But i want years with months like(7year 9month 7day?any help

  • Possible duplicate of http://stackoverflow.com/questions/26063882/how-to-get-difference-between-2-dates-in-years-months-and-days-using-moment-js – SLePort Feb 26 '16 at 07:09
  • Look at here http://momentjs.com/docs/#/displaying/difference/ – michelem Feb 26 '16 at 07:12

2 Answers2

2

Something like this?

// gets a human formatted date difference string: "X years, Y months, Z days"
function momentDiff(oldDate, newDate) {
  var oldDateMoment, newDateMoment, numYears, numMonths, numDays;

  oldDateMoment = moment(oldDate);
  newDateMoment = moment(newDate);

  numYears = newDateMoment.diff(oldDateMoment, 'years');
  oldDateMoment = oldDateMoment.add(numYears, 'years');
  numMonths = newDateMoment.diff(oldDateMoment, 'months');
  oldDateMoment = oldDateMoment.add(numMonths, 'months');
  numDays = newDateMoment.diff(oldDateMoment, 'days');

  return numYears + " years, " + numMonths + " months, " + numDays + " days.";
}

document.addEventListener('DOMContentLoaded', function() {
  var getDiffButton = document.querySelector('#getDiff');

  getDiffButton.addEventListener('click', function() {
    var oldDate = document.querySelector('#oldDate').value;
    var newDate = document.querySelector('#newDate').value;

    var answerDiv = document.querySelector('#answer');
    // call the function with two dates
    answerDiv.innerHTML = momentDiff(oldDate, newDate);
  });
});
<script src="http://momentjs.com/downloads/moment.js"></script>
<label for="oldDate">Old Date</label>
<input type="date" id="oldDate" name="oldDate" />
<br/>
<label for="newDate">New Date</label>
<input type="date" id="newDate" name="newDate" />
<br/>
<button id="getDiff">Get Diff</button>
<br/>
<div id="answer"></div>
cobberboy
  • 5,598
  • 2
  • 25
  • 22
1

For my usage, I am require to include the day itself into the calculation thus adding 1 extra day to the end dated

momentDiff(startDate, endDate) {
var years, months, days;

var momentStartDate = moment(startDate)
var momentEndDate = moment(endDate).add(1, 'days')

years = momentEndDate.diff(momentStartDate, 'years'); 
months = momentEndDate.diff(momentStartDate, 'months') %  12

let tempStartDate = momentStartDate.add(months, 'months')
days = momentEndDate.diff(tempStartDate, 'days') % 365

return years + "|" + months + "|" + days;
}
GaTOTHEry
  • 11
  • 1