Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di ivy_76
    Registrato dal
    Dec 2004
    Messaggi
    1,822

    JS: convertire formato ora in numero

    Ciao

    ho 3 campi input nei quale l'utente inserisce una quantità espressa in Ore Minuti e Secondi. Esempio

    campo1 09:10:20
    campo2 04:10:00
    campo3 05:00:20


    Mi servirebbe una funzione JS che converta queste tre ore in secondi, poi sommi i 3 valori ottenuti e alla fine convertire il risultato nel formato HH:MM:SS
    Come posso fare ?
    TORTA DI RISO .. F I N I T A !!

    Da M.C.S.A. a impiegato pubblico :-(

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Suppongo che la correttezza del formato digitato la faccia tu altrove

    codice:
    <script>
    function t2s(stringa) {
    pippo = stringa.split(":");
    return parseInt(pippo[0],10)*3600+parseInt(pippo[1],10)*60+parseInt(pippo[2],10);
    }
    
    function s2t(numero) {
    ss = numero % 60;
    nn = Math.floor(numero/60);
    mm = nn % 60;
    oo = Math.floor(nn/60);
    return String(1000+oo).substr(2)+":"+String(1000+mm).substr(2)+":"+String(1000+ss).substr(2);
    }
    
    document.write(s2t(t2s("01:01:01")+t2s("11:49:36")))
    
    </script>
    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Questa domanda mi ha dato lo stimolo per PROVARE a creare una classe tempo che faccia operazioni su tempi.
    Non sono molto pratico di classi, perciò, attenzione:

    classe tempo
    codice:
    /*--------------------------------------------------------------------------------
    definisco il costruttore della classe
    accetta o tre parametri: ore, minuti, secondi
    o una stringa tipo "ore:minuti:secondi"
    ---------------------------------------------------------------------------------*/
    function tempo(ore, minuti, secondi)
    {
        if(typeof(minuti) == "undefined" || typeof(secondi) == "undefined")
        {
            if(typeof(ore) == "string" )
            {
                var s = ore.split(":");
                if(s.length != 3) {alert("parametri sbagliati");return;};
                
                this.ore = parseInt(s[0], 10);
                this.minuti = parseInt(s[1], 10);
                this.secondi = parseInt(s[2], 10);
            }
            else {alert("parametri sbagliati");return;};
    
        }
        else if (typeof(ore) == "number" && typeof(minuti) == "number" && typeof(secondi) == "number"   )
        {
            this.ore = parseInt(ore, 10);
            this.minuti = parseInt(minuti, 10);
            this.secondi = parseInt(secondi, 10);
        
        }
        else {alert("parametri sbagliati");return;};
        
    }
    
    //metodo di istanza: restituisce il tempo nella forma ore:minuti:secondi
    tempo.prototype.toString = function()
    {
        var minuti = (this.minuti < 10)? "0" + this.minuti: this.minuti;
        var secondi = (this.secondi < 10)? "0" + this.secondi: this.secondi;
        return this.ore + ":" + minuti + ":" + secondi;
    }
    
    //metodo di istanza: restituisce i secondi totali di tempo
    tempo.prototype.getSeconds = function()
    {
        return this.secondi + this.minuti * 60 + this.ore * 3600;
    }
    
    
    //metodo di classe
    //somma due o più tempi e restituisce il tempo totale
    tempo.add = function(a, b)
    {
        if(arguments.length < 2)
        {alert("parametri sbagliati");return;};
            
        var ore, minuti, secondi;
        var resto = 0; somma = 0, riporto = 0;
        
        somma = sumSecondi(arguments);
        riporto = Math.floor(somma / 60);
        resto = somma % 60;
        secondi = resto;
        
        somma = sumMinuti(arguments) + riporto;
        riporto = Math.floor(somma / 60);
        resto = somma % 60;
        minuti = resto;
        
        somma = sumOre(arguments) + riporto;
        ore = somma;
        
        return new tempo(ore, minuti, secondi);   
        
        function sumSecondi(a)
        {
            var tot = 0;
            for(var i = 0; i < a.length; i++)
                tot += a[i].secondi;
            return tot;
        } 
        function sumMinuti(a)
        {
            var tot = 0;
            for(var i = 0; i < a.length; i++)
                tot += a[i].minuti;
            return tot;
        } 
        function sumOre(a)
        {
            var tot = 0;
            for(var i = 0; i < a.length; i++)
                tot += a[i].ore;
            return tot;
        } 
        
    }
    
    //metodo di classe
    //sottrae il tempo b dal tempo a
    //restituisce il tempo risultante
    tempo.subtract = function(a, b)
    {
        var s1 = a.getSeconds();
        var s2 = b.getSeconds();
        var s = Math.abs(s1 - s2);
        
        var ore, minuti, secondi;
        
        ore = Math.floor(s / 3600); if(s2 > s1) ore = -ore;
        s = s - ore * 3600;
        
        minuti = Math.floor(s / 60);
        s = s - minuti * 60;
        
        secondi = s;
        
        return new tempo(ore, minuti, secondi);
        
    }

    l'ho collaudata così:
    codice:
        //due modi diversi per creare oggetti tempo
        var t1 = new tempo("10:20:36");
        var t2 = new tempo(8,50,49);
        
        //sommo 2 o più tempi
        var t3 = tempo.add(t1, t2);
        //visualizzo il risultato
        alert( t1.toString() + " +\n" + t2.toString() + " =\n" + t3.toString() );
        
        //sotraggo tempo t2 da tempo t1
        var t4 = tempo.subtract(t1, t2);
        //visualizzo il risultato
        alert(t1.toString() + " -\n" + t2.toString() + " =\n" + t4.toString());
        
        //sommo più tempi e restituisco il risultato
        alert("Somma di più tempi\n" + tempo.add(new tempo("10:20:36"), new tempo("8:50:49"), new tempo("9:12:58")).toString());
    Pietro

  4. #4
    Utente di HTML.it L'avatar di ivy_76
    Registrato dal
    Dec 2004
    Messaggi
    1,822
    Siete mitici !!! GRazie ragazzi
    TORTA DI RISO .. F I N I T A !!

    Da M.C.S.A. a impiegato pubblico :-(

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.