2016-05-08 205 views
9

Ho un conteggio dei secondi memorizzati nella variabile seconds. Voglio convertire per esempio 1439 secondi a 23 minuti e 59 secondi. E se il tempo è maggiore di 1 ora (ad esempio 9432 secondi), a 2 ore, 37 minuti e 12 secondi.Come convertire secondi in minuti e ore in javascript

Come posso ottenere questo risultato?

sto pensando:

var sec, min, hour; 

if(seconds<3600){ 
    var a = Math.floor(seconds/60); //minutes 
    var b = seconds%60; //seconds 

    if (b!=1){ 
     sec = "seconds"; 
    }else{ 
     sec = "second"; 
    } 

    if(a!=1){ 
     min = "minutes"; 
    }else{ 
     min = "minute"; 
    } 

    $('span').text("You have played "+a+" "+min+" and "+b+" "+sec+"."); 
}else{ 
     var a = Math.floor(seconds/3600); //hours 
    var x = seconds%3600; 
    var b = Math.floor(x/60); //minutes 
    var c = seconds%60; //seconds 

    if (c!=1){ 
     sec = "seconds"; 
    }else{ 
     sec = "second"; 
    } 

    if(b!=1){ 
     min = "minutes"; 
    }else{ 
     min = "minute"; 
    } 

    if(c!=1){ 
     hour = "hours"; 
    }else{ 
     hour = "hour"; 
    } 

    $('span').text("You have played "+a+" "+hour+", "+b+" "+min+" and "+c+" "+sec+"."); 
} 

ma questo è un sacco di codice, e deve essere calcolata ogni secondo. Come posso ridurlo?

+0

Ho risposto qui: [come convertire minuti in giorni, ore, minuti] (http://stackoverflow.com/questions/2751073/how-to-convert-minutes-to-days-hours-minutes/2751143 # 2751143) –

+0

@RomainHippeau ciao! Sì, il mio codice funziona, ma è davvero grande, sto cercando di ridurlo (: –

+0

puoi usare qualche libreria come dataformat –

risposta

29

Penso che troverete this solution molto utile.

Si modifica il formato di visualizzazione in base alle proprie esigenze con qualcosa di simile -

function secondsToHms(d) { 
    d = Number(d); 
    var h = Math.floor(d/3600); 
    var m = Math.floor(d % 3600/60); 
    var s = Math.floor(d % 3600 % 60); 

    var hDisplay = h > 0 ? h + (h == 1 ? " hour, " : " hours, ") : ""; 
    var mDisplay = m > 0 ? m + (m == 1 ? " minute, " : " minutes, ") : ""; 
    var sDisplay = s > 0 ? s + (s == 1 ? " second" : " seconds") : ""; 
    return hDisplay + mDisplay + sDisplay; 
} 
2

Si può provare questo, ho usato questo successo in passato Si dovrebbe essere in grado di aggiungere i minuti ei secondi su facilmente

function secondsToTime(secs) 
{ 
    var hours = Math.floor(secs/(60 * 60)); 

    var divisor_for_minutes = secs % (60 * 60); 
    var minutes = Math.floor(divisor_for_minutes/60); 

    var divisor_for_seconds = divisor_for_minutes % 60; 
    var seconds = Math.ceil(divisor_for_seconds); 

    var obj = { 
     "h": hours, 
     "m": minutes, 
     "s": seconds 
    }; 
    return obj; 
} 

Fiddle

È possibile modificare l'oggetto da

0.123.
var obj = { 
     "h": hours + " hours", 
     "m": minutes + " minutes", 
     "s": seconds + " seconds" 
    }; 
0

Sono probabilmente un po 'in ritardo, ma si può raggiungere questo tipo di cose usando

https://momentjs.com/

myVar = moment(myVar).format('HH:mm');

momento fornisce un sacco di formato per ore/date ecc

+0

Non è mai troppo tardi, ma Sono assolutamente convinta che a seconda del caso d'uso è possibile aggiungere momentjs ma solo per aggiungere un'intera biblioteca per qualcosa di piccolo come questo ... sembra un po 'troppo, non pensi. Ma sì, il lavoro sarà terminato – R4nc1d

+0

momento.js è ottimo, ma per formattare secondi invece di un oggetto momento, devi usare 'moment.duration()'. Ad esempio: '$ {moment.duration (Number (myVar), 'seconds'). Hours()}: $ {moment.duration (Number (myVar), 'seconds'). Minutes()}: $ {moment. durata (Number (myVar), 'seconds'). seconds()} ' – Sauce

0

Un modo low fat per fare ciò è:

function seconds_to_days_hours_mins_secs_str(seconds) 
{ // day, h, m and s 
    var days  = Math.floor(seconds/(24*60*60)); 
     seconds -= days * (24*60*60); 
    var hours = Math.floor(seconds/(60*60)); 
     seconds -= hours * (60*60); 
    var minutes = Math.floor(seconds/(60)); 
     seconds -= minutes * (60); 
    return ((0<days)?(days+" day, "):"")+hours+"h, "+minutes+"m and "+seconds+"s"; 
} 

Così

> seconds_to_days_hours_mins_secs_str(9432+60*60*24) 
'1 days, 2h, 37m and 12s' 

Questo è facile da capire ed estendere, se necessario.

Problemi correlati