JavaScript that displays how many months weeks days hours minutes minutes have in x hours

3

I'm trying to put together a script that transforms a quantity x of hours into months weeks days hours minutes minutes

I have a problem with all scripts that I find return by ex and you have 1 week it returns 1 week 7 days x hours and so on.

It would have to round or approach. if it's hard only the days are good

The script I'm trying to use is more or less this

function calcula(){
    / Set the unit values in milliseconds.
    var msecPerMinute = 1000 * 60;
    var msecPerHour = msecPerMinute * 60;
    var msecPerDay = msecPerHour * 24;

    // Set a date and get the milliseconds
    var date = new Date('6/15/1990');
    var dateMsec = date.getTime();

    // Set the date to January 1, at midnight, of the specified year.
    date.setMonth(0);
    date.setDate(1);
    date.setHours(0, 0, 0, 0);

    // Get the difference in milliseconds.
    var interval = dateMsec - date.getTime();

    // Calculate how many days the interval contains. Subtract that
    // many days from the interval to determine the remainder.
    var days = Math.floor(interval / msecPerDay );
    interval = interval - (days * msecPerDay );

    // Calculate the hours, minutes, and seconds.
    var hours = Math.floor(interval / msecPerHour );
    interval = interval - (hours * msecPerHour );

    var minutes = Math.floor(interval / msecPerMinute );
    interval = interval - (minutes * msecPerMinute );

    var seconds = Math.floor(interval / 1000 );

    // Display the result.
    document.write(days + " days, " + hours + " hours, " + minutes + " minutes, " + seconds + " seconds.");

    //Output: 164 days, 23 hours, 0 minutes, 0 seconds.

}

This script uses one date to compare to another and this is not what I need because my system returns an x number of minutes.

    
asked by anonymous 20.12.2016 / 03:57

1 answer

4

I created this function to help you:

function calcula(valorInicio){
    //primeiro criei constantes para armazenar os valores dos tempos em MINUTOS. altere eles de acordo com sua necessidade
    const minutos = 1;
    const horas = 60; //minuto * 60
    const dias = 1440; //hora * 24
    const semanas = 10080; //dias * 7
    const meses = 302400; //semanas * 4
    const anos = 3628800; //meses * 12

    if (valorInicio > anos){//verifica se é maior que um ano
        var ano = Math.floor(valorInicio / anos); //cria a variável ano e armazena a quantidade de anos nela
        valorInicio = valorInicio - (anos * ano); //atualiza o valorInicio
    }else{
        var ano = 0; //se for menor que um ano, cria a variável ano e deixa zerada
    }

    //faz o mesmo para os meses
    if (valorInicio > meses){
        var mes = Math.floor(valorInicio / meses);
        valorInicio = valorInicio - (meses * mes);
    }else{
        var mes = 0;
    }

    //faz o mesmo para as semanas
    if (valorInicio > semanas){
        var semana = Math.floor(valorInicio / semanas);
        valorInicio = valorInicio - (semanas * semana);
    }else{
        var semana = 0;
    }

    //faz o mesmo para os dias
    if (valorInicio > dias){
        var dia = Math.floor(valorInicio / dias);
        valorInicio = valorInicio - (dias * dia);
    }else{
        var dia = 0;
    }

    //faz o mesmo para os horas
    if (valorInicio > horas){
        var hora = Math.floor(valorInicio / horas);
        valorInicio = valorInicio - (horas * hora);
    }else{
        var hora = 0;
    }


        var minuto = valorInicio; //o que sobra são minutos
alert('Anos: '+ano+' - Meses: '+mes+' - Semanas: '+semana+' - Dias: '+dia+' - Horas: '+hora+' - Minuto: '+minuto);      
        //os resultados são as variáveis criadas, adapte o código de acordo com sua necessidade
        }
    
20.12.2016 / 05:28