JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
JavaScript
/**
* タイムスタンプを整形して返す
*
* @param {string} ssms 秒(ss)とミリ秒(ms)で構成されたタイムスタンプ e.g. "4080.770" (01:08:00.770)
* @return {string} showTime e.g. "1:8:0.77"
*/
function formatTimestamp(time = 0)
{
if(time == 0){
return "0:0:0";
}
var ssms = time.split(".");
var temp_ss = ssms[0];
var temp_ms = ssms[1] ? ssms[1] : 0;
var m = moment.utc(temp_ss * 1000);
var hms = m.format("H:m:s");
var ms = removeTrailingZeros("." + temp_ms);
ms = ms ? ms : "";
var showTime = hms + ms;
return showTime;
}
/**
* 数字文字列の末尾のゼロを除去して返す
*
* [EXAMPLES]
* 1 -> 1
* 10 -> 10
* 100. -> 100
* 100.0 -> 100
* 100.1 -> 100.1
* 100.10 -> 100.1
* 100.01 -> 100.01
* 100.010 -> 100.01
* '1.2304000' -> 1.2304
* '1,000.000' -> 1,000
*
* @param {string|integer} value 数字文字列
* @return {string} value 末尾ゼロを除去した数字文字列
*/
function removeTrailingZeros(value)
{
var value = value.toString()
//console.log('Starting with:', value, value.indexOf('.'))
// ドット(ミリ秒)を含まない場合はそのままの値を返す
if (value.indexOf('.') === -1) {
return value;
}
var cutFrom = value.length - 1;
// ゼロの削除を末尾からドットの方向へ繰り返す
do {
//console.log('Checking:', value[cutFrom], cutFrom)
if (value[cutFrom] === '0') {
cutFrom--;
}
}
while (value[cutFrom] === '0');
// ドットの位置に来たら処理を終了する
if (value[cutFrom] === '.') {
cutFrom--;
}
return value.substr(0, cutFrom + 1);
}
console.log(formatTimestamp("4080.770"));
console.log(formatTimestamp("3600"));
console.log(formatTimestamp("2045"));
console.log(formatTimestamp("1000.000"));
console.log(formatTimestamp("1000.001"));
console.log(formatTimestamp("1000.010"));
console.log(formatTimestamp("1000.011"));
console.log(formatTimestamp("1000.100"));
console.log(formatTimestamp("1000.101"));
console.log(formatTimestamp("1000.110"));
console.log(formatTimestamp("1000.111"));
console.log(formatTimestamp("300"));
console.log(formatTimestamp("10.202"));
console.log(formatTimestamp("0.500"));