ビデオの長さの値を Web サーバーからティックとして取得しています。「hh:mm:ss」形式で表示したい。JavaScriptでこれを行うにはどうすればよいですか?
4 に答える
ティックが秒単位であると仮定すると (そうでない場合は、最初に秒に変換できます)、タイム スパン内の分数と時間数を見つけてから残りの秒数を取得することで、目的の形式を取得できます。時間は 3600 秒、分は 60 秒であるという事実と同様に、モジュロ演算子はここで役立ちます。
function displayTime(ticksInSecs) {
var ticks = ticksInSecs;
var hh = Math.floor(ticks / 3600);
var mm = Math.floor((ticks % 3600) / 60);
var ss = ticks % 60;
alert( pad(hh, 2) + ":" + pad(mm, 2) + ":" + pad(ss, 2) );
}
function pad(n, width) {
var n = n + '';
return n.length >= width ? n : new Array(width - n.length + 1).join('0') + n;
}
JS で数値の先頭にゼロを埋め込む方法については、この回答を参照してください (上記の方法は、この回答から派生したものです)。
これは古い質問ですが、どの回答にも満足できませんでした。
ここには 3 つの問題があります。
- ティック サイズを秒に変換する
- 秒単位の期間から時、分、秒を抽出する
- 数値を 2 桁にフォーマットする
パート 1 - ティック
メディアのティック サイズにはさまざまな期間があるため、質問に答えるにはいくつかの仮定を行う必要があります。
望ましい答えは秒、分、時間であるため、最初のステップは「目盛り」の値を秒に変換することです。
seconds = ticks / tickspersecond
たとえば、ティックがミリ秒単位の場合、変換は次のようになります。
seconds = ticks / 1000
パート 2 - 時、分、秒の抽出
hour = seconds / secondsperhour
=>hour = seconds / 3600
minute = seconds / secondsperminute modulus minutesperhour
=>minute = (seconds / 60) % 60)
second = seconds modulus secondsperminute
=>second = seconds % 60
パート 3 - フォーマット
- 数値の先頭のゼロをフォーマットする方法はいくつかありますが、この例では、この例に固有の単純な関数 (最大 2 桁) を使用します。
例えば
function pad2(number){
number = '0' + number;
return number.substr(number.length - 2);
}
注: 浮動小数点エラーのため、時間と分の両方の値に Math.floor を適用する必要があります。メインコードを短くしたい場合Math.floor
は、関数に入れることができます。pad2
最終的な答えは次のようになります。
// Assume milliseconds for now
var seconds = ticks / 1000;
var hour = Math.floor(seconds / 3600);
var minute = Math.floor((seconds / 60) % 60);
var second = seconds % 60;
var result = pad2(hour) + ':' + pad2(minute) + ':' + pad2(second)
注:デモのために、1971年以降の時間は「大きな」数字であるため、時間表示に% 24
(modulus hoursperday
)を追加しました-したがって、小数点以下2桁にフォーマットされません:)
JSfiddle デモ: https://jsfiddle.net/TrueBlueAussie/x2s77gzu/
Math.floor
または、https://jsfiddle.net/TrueBlueAussie/x2s77gzu/1/に入れたい場合pad2