Moment.js Продолжительность между двумя датами - PullRequest
0 голосов
/ 21 февраля 2019

Как получить разницу во времени между двумя разными переменными дат, в частности, в годах, месяцах и днях, используя moment.js?

Я нашел этот метод, но продолжаю получать странные результаты.Иногда результат на месяц вперед, поэтому я добавил часть вычитания за один месяц, чтобы сделать результат корректным, но когда разница между двумя датами может быть разделена на целые годы, она становится на месяц позади, но затем, если я удаляю месяц вычитаниячастично, это становится еще более неожиданным.

Также я хотел бы отформатировать его как «X Years, Y Months, Z days», но также не могу понять, как отформатировать его таким образом.

var dateOne = new Date(2000,07,16);
var dateTwo = new Date (1990,07,16);
var updatedDate = moment(dateOne).format('ll');
   
var x = moment(dateOne, 'DD/MM/YYYY').diff(moment(dateTwo, 'DD/MM/YYYY'))
var y = moment.duration(x);
var why = moment(x).subtract(1, 'M');
var z = Math.floor(y.asYears()) + moment.utc(why).format('/MM/DD');
console.log(z);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019

Как отмечалось другими в комментариях, вы не можете форматировать длительность как дату, и поскольку dateOne и dateTwo являются объектами Date, второй аргумент в moment(dateOne, 'DD/MM/YYYY') не требуется, просто используйтеmoment(Date).

Перемещение, обратите внимание, что при использовании new Date(year, monthIndex, day) monthIndex начинается с 0, см. Документы MDN :

Аргумент monthIndex основан на 0.Это означает, что January = 0 и December = 11.

Вы можете использовать плагин moment-duration-format для форматирования продолжительности момента в соответствии с вашими потребностями, см. format() документы на странице плагина .

Вот живой пример:

var dateOne = new Date(2000, 7, 16);
var dateTwo = new Date(1990, 7, 16);

var diff = moment(dateOne).diff(moment(dateTwo))
var dur = moment.duration(diff);
var result = dur.format();
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/2.2.2/moment-duration-format.min.js"></script>
0 голосов
/ 21 февраля 2019

Момент имеет метод с именем .diff () Используйте его.https://momentjs.com/docs/#/displaying/difference/

0 голосов
/ 21 февраля 2019

Попробуйте это возможно?

var firstDate = moment();
var secondDate = moment("2018-03-19");
var yearDiff = firstDate.diff(secondDate, "year");
var monthDiff = firstDate.diff(secondDate, "month");
var dayDiff = firstDate.diff(secondDate, "day");
console.log(yearDiff + " Years, " + monthDiff + " Months, " + dayDiff + " Days");

https://jsfiddle.net/px1brLdk/

...