I get incorrect results when trying to find numeric difference between two dates:
var startDate = moment( $('[name="date-start"]').val(), "DD.MM.YYYY"), // $('[name="date-start"]').val() === "13.04.2016"
endDate = moment( $('[name="date-end"]' ).val(), "DD.MM.YYYY"); // $('[name="date-end"]').val() === "28.04.2016"
var diff = startDate.diff(endDate);
console.log( moment(diff).format('E') );
Between 13.04.2016
and 28.04.2016
I shouldn't get that difference is 3 or 2 days...
I've tried to multiple combinations:
startDate.diff(endDate)
with endDate.diff(startDate)
format('E')
with something I've come up searching the SOresult: all the time I get that difference is 3 or 2 days.
What am I doing wrong? Thanks in advance.
The moment(). daysInMonth() function is used to get the number of days in month of a particular month in Node. js. It returns an integer denoting the number of days.
From the moment.js docs: format('E')
stands for day of week. thus your diff is being computed on which day of the week, which has to be between 1 and 7.
From the moment.js docs again, here is what they suggest:
var a = moment([2007, 0, 29]); var b = moment([2007, 0, 28]); a.diff(b, 'days') // 1
Here is a JSFiddle for your particular case:
$('#test').click(function() { var startDate = moment("13.04.2016", "DD.MM.YYYY"); var endDate = moment("28.04.2016", "DD.MM.YYYY"); var result = 'Diff: ' + endDate.diff(startDate, 'days'); $('#result').html(result); });
#test { width: 100px; height: 100px; background: #ffb; padding: 10px; border: 2px solid #999; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.12.0/moment.js"></script> <div id='test'>Click Me!!!</div> <div id='result'></div>
Here's how you can get the comprehensive full fledge difference of two dates.
function diffYMDHMS(date1, date2) {
let years = date1.diff(date2, 'year');
date2.add(years, 'years');
let months = date1.diff(date2, 'months');
date2.add(months, 'months');
let days = date1.diff(date2, 'days');
date2.add(days, 'days');
let hours = date1.diff(date2, 'hours');
date2.add(hours, 'hours');
let minutes = date1.diff(date2, 'minutes');
date2.add(minutes, 'minutes');
let seconds = date1.diff(date2, 'seconds');
console.log(years + ' years ' + months + ' months ' + days + ' days ' + hours + '
hours ' + minutes + ' minutes ' + seconds + ' seconds');
return { years, months, days, hours, minutes, seconds};
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With