JSFiddle - React, Tailwind, and code Playground

by gustavox

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.min.js"></script>
Meses: <span class='meses2'></span>
<br>
Dias: <span class='dias'></span>
<br>

JavaScript

var data_1 = ('2012-07-16');
var data_2 = ('2014-04-14');

var data_3 = ('2012-07-16');
var data_4 = ('2014-04-14');

var checkin = moment(data_3, 'YYYY-MM-DD');
var checkout = moment(data_4, 'YYYY-MM-DD');
var dias = checkout.diff(checkin, 'days');

var datasplit1 = data_1.split("-");
var datasplit2 = data_2.split("-");
var meses = 0;
var difAnos = (datasplit2[2] - datasplit1[2]);

// Se os anos são iguais, meses é igual (mês final - mês inicial + 1)

if (datasplit1[0] === datasplit2[0]) {
    meses = datasplit2[1] - datasplit1[1] + 1;
}

// Se os anos são diferentes, o período tem mais de 365 dias, e o mês inicial é inferior ao final ((ano final - ano inicial) * 12) + (mes final - mes inicial)

if ((datasplit1[0] != datasplit2[0]) && (dias > 365) && (datasplit1[1] < datasplit2[1]))

{
    if (difAnos == 1) {
        meses = ((datasplit2[0] - datasplit1[0]) * 12);
        meses = meses + (parseInt(datasplit2[1])) - (parseInt(datasplit1[1])) + 1;
    }
    if (difAnos > 1) {
        meses = (((datasplit2[0] - datasplit1[0]) * 12));
        meses = meses + (parseInt(datasplit2[1])) - (parseInt(datasplit1[1])) + 1;
    }
}

// Se os anos são diferentes, o período tem mais de 365 dias, e o mês inicial é superior ao inicial ((ano final - ano inicial) * 12) + (mês final)

if ((datasplit1[0] != datasplit2[0]) && (dias > 365) && (datasplit1[1] > datasplit2[1]))

    
    // se difAnos > 1 - percisa abater os meses do início para não conflitar com difAnos * 12
{
    difAnos = (datasplit2[0] - datasplit1[0]);
    if (difAnos == 1) {
        meses = ((datasplit2[0] - datasplit1[0]) * 12);
        meses = meses + parseInt(datasplit2[1]) + 1;
    }
    if (difAnos > 1) {
        meses = (((datasplit2[0] - datasplit1[0]) * 12) - datasplit1[1]);
        meses = meses + parseInt(datasplit2[1]) + 1;
    }
}

// Se os anos são diferentes, o período tem menos de 365 dias ((mês inicial - 12 + 1) + (mês final))

if ((datasplit1[0] != datasplit2[0]) && (dias < 365) && (datasplit1[1]...