Javascript that displays how many months weeks days hours minutes seconds in x hours

Asked

Viewed 1,895 times

3

I’m trying to put together a script that turns a number x of hours into weeks weeks hours minutes seconds

only that there is a problem all scripts I found return by ex c vc has 1 week it returns 1 week 7 days x hours and so on.

it would have to round or close. if it is difficult only the days serve

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.

}

only this script uses a date to compare the other and that’s not what I need because my system returns a number x of minutes.

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
        }
  • the code worked for what you wanted?

  • my initial value is in seconds so I would have to multiply it by 60 correct ?

  • Yes, you can make the changes in constants according to your needs. creates a new constant called seconds and recalculates constants

  • thanks I made a slight adaptation but solved ^^

Browser other questions tagged

You are not signed in. Login or sign up in order to post.