2
respostas

[Dúvida] Calcular diferença entre horas

Olá, estou tentando criar um projeto onde o usuário define a carga horária de trabalho (exemplo: 08:00), o horário de entrada (08:00), saída para almoço (12:00), retorno do almoço (13:00) e horário de saída (18:00) e o sistema calcula se houve horas positivas ou horas negativas. Os dados estão no formato "Time", e quando tento calcular no javascript, ele aparece a mensagem "NaN".

function calcular(chTrabalho, hEntrada, hSaidaAlmoco, hRetornoAlmoco, hSaida) {

    var chTrabalho = document.getElementById("chTrabalho").value; // 08:00
    var hEntrada = document.getElementById("hEntrada").value; // 08:00
    var hSaidaAlmoco = document.getElementById("hSaidaAlmoco").value; // 12:00
    var hRetornoAlmoco = document.getElementById("hRetornoAlmoco").value; // 13:00
    var hSaida = document.getElementById("hSaida").value; // 18:00
    var hTotal = ((hSaida - hEntrada) - (hRetornoAlmoco - hSaidaAlmoco)); // 09:00
    var hPositivas = ((hSaida - hEntrada) - (hRetornoAlmoco - hSaidaAlmoco) - hTotal); // 01:00
    var hNegativas = (hTotal - ((hSaida - hEntrada) - (hRetornoAlmoco - hSaidaAlmoco))); // 00:00

    if (hTotal > chTrabalho) {

        console.log("Você possui " + hPositivas + "horas positivas.");

        return true;
    }

    else {

        console.log("Você possui " + hNegativas + "horas negativas.");

        return true;
    }
}
2 respostas

Problema solucionado.

Solução: Inclusão de "parseInt" após a declaração das variáveis e simplificação do cálculo de horas positivas/negativas.

    function calcular(chTrabalho, hEntrada, hSaidaAlmoco, hRetornoAlmoco, hSaida) {
    var chTrabalho = parseInt(document.getElementById("chTrabalho").value); // 08:00
    var hEntrada = parseInt(document.getElementById("hEntrada").value); // 08:00
    var hSaidaAlmoco = parseInt(document.getElementById("hSaidaAlmoco").value); // 12:00
    var hRetornoAlmoco = parseInt(document.getElementById("hRetornoAlmoco").value); // 13:00
    var hSaida = parseInt(document.getElementById("hSaida").value); // 18:00
    var hTotal = parseInt(((hSaida - hEntrada) - (hRetornoAlmoco - hSaidaAlmoco))); // 09:00
    var hPositivas = parseInt(hTotal - chTrabalho); // 01:00
    var hNegativas = parseInt(chTrabalho - hTotal); // 00:00    

    if (hTotal > chTrabalho) {

        return document.getElementById("horas").innerHTML = `Você possui ${hPositivas} horas positivas.`        

    }

    if (hTotal < chTrabalho) {

        return document.getElementById("horas").innerHTML = `Você possui ${hNegativas} horas negativas.`                        

    }

    else {

        return document.getElementById("horas").innerHTML = `Você não possui horas para compensar.`

    }

}

Provavelmente o valor estava sendo lido como string, por isso o NaN, colocando o parseInt que você comentou resolveu por conta disso