JSFiddle - React, Tailwind, and code Playground

HTML

Начальная дата: <input type="date" value="2011-12-09" id="from"><br>
Конечная дата: <input type="date" value="2012-12-21" id="to"><br>
<input type="button" value="Рассчитать" onclick="calc()">
<hr>
<div id="result"></div>

JavaScript

// вспомогательная арифметика: число дней в месяце
function daysInMonth(year, month) {
    return (new Date(year, month+1, 0).getDate());
}

// основная арифметика здесь
function dateDiff(yearFrom, monthFrom, dateFrom, yearTo, monthTo, dateTo) {

    var dY = yearTo - yearFrom,
        dm = monthTo - monthFrom,
        dd = dateTo - dateFrom;
    
    if (dd < 0) {
        dm--;
        dd += daysInMonth(yearFrom, monthFrom);
    }

    if (dm < 0) {
        dY--;
        dm += 12;   
    }

    return { years: dY, months: dm, days: dd }
}

// вспомогательный русский язык (подбор формы слова к числу)
function numberForm(n, form1, form2, form5) {
    if ((n % 100 < 11) || (n % 100 > 15)) {
        var lastDigit = n % 10;
        if (lastDigit == 1) return form1;
        else if (lastDigit > 1 && lastDigit < 5) return form2;
        else return form5;
    }
    else return form5;
}

// расчет и вывод результата
function calc() {
    var parts0 = document.getElementById('from').value.split('-'),
        parts1 = document.getElementById('to').value.split('-'),
        diff, totalMonth, totalDays;
    
    diff = dateDiff(parts0[0], parts0[1]-1, parts0[2],
                    parts1[0], parts1[1]-1, parts1[2]);
    
    totalMonth = diff.months + diff.years * 12;

    totalDays = (Date.UTC(parts1[0], parts1[1]-1, parts1[2]) -
                 Date.UTC(parts0[0], parts0[1]-1, parts0[2])) / 86400000;
    
    
    document.getElementById('result').innerHTML = 'Разница дат равна ' +
        diff.years + ' ' + numberForm(diff.years, 'год ', 'года ', 'лет ') +
        diff.months + ' ' + numberForm(diff.months, 'месяц ', 'месяца ', 'месяцев ') +
        diff.days + ' ' + numberForm(diff.days, 'день', 'дня', 'дней') +
        ', или ' + totalMonth + ' ' + numberForm(totalMonth, 'месяц ', 'месяца ', 'месяцев ') +
        diff.days + ' ' + numberForm(diff.days, 'день', 'дня', 'дней') +
        ', или ' +
        totalDays+ ' ' + numberForm(totalDays, 'день', 'дня',...