Ваш лог c, кажется, испорчен, слишком много всего требуется для полного анализа, но вот пара вопросов:
previousStartYear = startYear;
мне кажется, что его следует назначать, только если startYear меньше prevoiusStartYear или previousStartYear не инициализировано. То же самое для previousEndYear = endYear
.
Также '2008-01-01T00: 00: 00.000Z' будет анализироваться как UT C, поэтому для пользователей с отрицательным смещением часового пояса new Date('2008-01-01T00:00:00.000Z').getFullYear()
вернет 2007, тогда как любая другая дата в году вернет 2008. Вы можете исправить это с помощью getUTCFullYear()
, но это может иметь другие последствия.
Если вы просто хотите получить диапазон от самого раннего начального года до самого последнего конца год, затем просто получите самый ранний начальный год и вычтите его из самого последнего конечного года, например
function calculate(data) {
let o = {};
data.forEach(obj => {
// Don't bother with Dates, just get the year from the string
let start = obj.StartDate.substr(0,4);
let end = obj.EndingDate.substr(0,4);
// Initialise o.start and o.end if not already done
if (!o.start) {
o.start = start;
o.end = end;
// Update values if start earlier or end later
} else {
if (start < o.start) o.start = start;
if (end > o.end) o.end = end;
}
});
// Get difference
return o.end - o.start;
}
let data1 = [
{StartDate: '2008-01-01T00:00:00.000Z',
EndingDate: '2016-01-01T00:00:00.000Z'},
{StartDate: '2006-03-01T00:00:00.000Z',
EndingDate: '2008-01-01T00:00:00.000Z'},
{StartDate: '2005-01-01T00:00:00.000Z',
EndingDate: '2015-11-01T00:00:00.000Z'},
{StartDate: '2002-01-01T00:00:00.000Z',
EndingDate: '2010-01-01T00:00:00.000Z'},
{StartDate: '2001-01-01T00:00:00.000Z',
EndingDate: '2008-11-01T00:00:00.000Z'}
];
console.log(calculate(data1)); // 15
let data2 = [
{StartDate: '2019-01-01T00:00:00.000Z',
EndingDate: '2020-01-01T00:00:00.000Z'},
{StartDate: '2017-03-01T00:00:00.000Z',
EndingDate: '2018-01-01T00:00:00.000Z'},
{StartDate: '2007-01-01T00:00:00.000Z',
EndingDate: '2019-11-01T00:00:00.000Z'}
];
console.log(calculate(data2)); // 13