Moment.js - разница двух дат по количеству дней
Я получаю неправильные результаты при попытке найти числовое различие между двумя датами:
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') );
Между 13.04.2016
и 28.04.2016
я не должен понимать, что разница составляет 3 или 2 дня...
Я пытался использовать несколько комбинаций:
- swap
startDate.diff(endDate)
с помощью endDate.diff(startDate)
-
format('E')
с чем-то, что я искал в SO
результат: все время я получаю, что разница составляет 3 или 2 дня.
Что я делаю не так? Заранее спасибо.
Ответы
Ответ 1
С момента.js docs: format('E')
обозначает день недели. таким образом, ваш дифференциал вычисляется в какой день недели, который должен быть между 1 и 7.
С момента того, как документы в формате.js снова, вот что они предлагают:
var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
a.diff(b, 'days') // 1
Вот JSFiddle для вашего конкретного случая:
$('#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>
Ответ 2
метод diff
возвращает разность в миллисекундах. Мгновенный moment(diff)
не имеет смысла.
Вы можете определить переменную:
var dayInMilliseconds = 1000 * 60 * 60 * 24;
а затем использовать его так:
diff / dayInMilliseconds // --> 15
редактировать
на самом деле, это встроено в метод diff
, ответ на dubes лучше
Ответ 3
Вот как вы можете получить полную полную разницу между двумя датами.
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};
}