JSFiddle - React, Tailwind, and code Playground

HTML

<script src="https://rawgit.com/lodash/lodash/2.4.1/dist/lodash.js"></script>
<script src="https://rawgit.com/ifandelse/machina.js/master/lib/machina.js"></script>

JavaScript

const moment = require('moment');
const _ = require('lodash');

const reverseDate = (date) => {
    const from = date.from.split('-').reverse().join('-');
    const to = date.to.split('-').reverse().join('-');
    return {
        from,
        to
    }
};


const timeline = [
    { from: "01-2015", to: "02-2016" },
    { from: "05-2015", to: "05-2016" },
    { from: "12-2015", to: "01-2016" },
    { from: "08-2016", to: "07-2017" },
    { from: "06-2016", to: "07-2017" }
].map(reverseDate);

const formatTime = (fromTo) => {
    const monthYearFrom = fromTo.from.split('-');
    const monthYearTo = fromTo.to.split('-');
    const getTimestamp = ([year, month]) => moment().year(year).month(month - 1).startOf('month').valueOf();

    return {
        start: getTimestamp(monthYearFrom),
        end: getTimestamp(monthYearTo)
    }
};

const dateContainsIn = (date, timeLine) => {
    return moment(date).isBetween(timeLine.from, timeLine.to)
};

const firstDate = formatTime(timeline[0]);
const secondDate = formatTime(timeline[1]);

// console.log(firstDate);
// console.log(secondDate);

// console.log(dateContainsIn(timeline[1].from, timeline[0]));


const addMonths = (date, timeline) => {
    const dateCopy = _.clone(date);
    if (dateContainsIn(dateCopy, timeline)) {
        return addMonths(moment(dateCopy).add(1, 'month').format('YYYY-MM'), timeline);
    } else {
        return moment(dateCopy).format('YYYY-MM');
    }
}

const calculateMonths = ([start, ...arr]) => {
    let startCopy = _.clone(start);
    const result = [startCopy];
    
    arr.forEach((item) => {
        if (dateContainsIn(item.from, startCopy) && !dateContainsIn(item.to, startCopy)) {
            console.log(addMonths(item.from, startCopy));
            let newItem = {
                from: addMonths(item.from, startCopy),
                to: item.to
            };
            result.push(item)
            startCopy = newItem;
        }
    })
   ...