Я добавил некоторые записи в ваш цикл и отключил их после одной итерации.
Для вашего примера неверен только первый месяц, поэтому вы ожидаете, что если вы добавите 1 месяц к 7 декабря,2018, вы получите 6 января 2019 года (на самом деле вы получите 7 января 2019 года).
Я не уверен, что должно делать условие, которое приводит к вычитанию дня.nextEnd.date () будет преобразовываться в день месяца, который для вашего примера всегда меньше 28.
const start = "12/7/2018";
const end = "10/6/2019";
var startLease = moment(start, "MM/DD/YYYY");
var endLease = moment(end, "MM/DD/YYYY");
var array = [];
var i = 0;
var nextEnd;
while (1 == 1) {
var nextStart = nextEnd ? (nextEnd.date() > 28 ? nextEnd : nextEnd) : nextEnd || startLease.clone().add(i, 'M');
console.log(nextStart);
nextEnd = startLease.clone().add(i + 1, 'M') > endLease ? endLease : startLease.clone().add(i + 1, 'M');
console.log(nextEnd);
if (nextEnd.date() > 28) {
nextEnd.subtract(1, 'days')
} else {}
array.push(nextEnd.diff(nextStart, 'days'));
if (nextEnd >= endLease) {
break;
} else {}
i += 1;
break;
}
console.log(array);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>