2016-05-08 7 views
9

変数secondsに秒数が格納されています。私は例えば1439秒を23分59秒に変換したい。そして、時間が1時間(例えば、9432秒)を超えると、2時間37分12秒になります。JavaScriptを秒単位で数秒に変換する方法

どうすればこの問題を解決できますか?

私はと思っています:

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+"."); 
} 

しかし、それは多くのコードだし、それは秒ごとに計算しなければなりません。どのように私はこれを縮小することができますか?

+0

私はこれをここに答えました:[分、日、時、分に変換する方法](http://stackoverflow.com/questions/2751073/how-to-convert-minutes-to-days-hours-minutes/2751143 #2751143) –

+0

@RomainHippeauこんにちは!はい、私のコードは動作しますが、それは本当に大きい、私はそれを縮小する方法を探しています(: –

+0

あなたはdateformatのようなライブラリを使用することができます –

答えて

29

this solutionは非常に役に立ちます。

あなたはこのようなもので、あなたのニーズに合わせて表示形式を変更する -

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

あなたはこれを試すことができ、私はあなたが上の分と秒を追加することができる必要があり、過去 に成功し、これを使用しています簡単

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

あなたは

にオブジェクトを変更することができます などモーメントが時間/日付の形式の多くを提供し、私は少し遅れて、おそらくだが、あなたは

https://momentjs.com/

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

を使用して、物事のこの種を達成することができます

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

+0

あまりにも遅すぎることはありませんが、ユースケースに応じて、あなたはmomentjsを追加することができますが、ちょうどこれのような小さなライブラリを追加することは間違いないと思います。しかし、はい、それは仕事を完了する – R4nc1d

+0

moment.jsは素晴らしいですが、モーメントオブジェクトの代わりに秒をフォーマットするには、あなたは 'moment.duration()'を使用する必要があります。例えば、$ {moment.duration(Number(myVar)、 'seconds')。hours()}:$ {moment.duration(Number(myVar)、 'seconds')。 duration(Number(myVar)、 'seconds')秒()} ' – Sauce

0

これを行う低脂肪方法は次のとおりです。

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"; 
} 

は、このように

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

これは、理解し、必要に応じて拡張が容易です。

関連する問題