如何通过moment.js跳过毫秒部分的零?
How to skipping zeros in the millisecond section by moment.js?
演示
https://jsfiddle.net/c59zsLux/1/
我想做什么
我想通过moment.js删除毫秒部分的零填充。
例子
0:00:00.000 → 0:0:0
0:16:55.404 → 0:16:55.404
1:00:30.100 → 1:0:30.1
1:09:01.770 → 1:9:1.77
条件
- 毫秒部分最多三位。
- 我想从那里删除尾随零。
- 如果所有数字都为零,则不会显示毫秒部分。
我的工具
/**
* タイムスタンプを整形して返す
*
* @param {string|integer} 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);
}
我不知道如何在 moment.js 选项中执行此操作,所以我自己实现了它。
我需要你们的一切
如果有更聪明的方法来做到这一点,或者如果它可以通过 moment.js 中的某些选项实现,请告诉我。
谢谢!
如果你知道传入时间的格式,你可以直接告诉 momentum moment.utc()
中的格式。例如,
const time = moment.utc("09:08:09.100", "hh:mm:ss.S"); // Old format here.
const formattedTime = time.format("h:m:s.S"); // New format here.
console.log(formattedTime); // 9:8:9.1
参考:moment(String, String). If you have more than one incoming formats you can pass them in an array - moment(String, String[])
在你的代码中,虽然我不确定传入的格式。但是可以肯定的是,时刻正在删除小时、分钟和秒的前导零。在毫秒的情况下,您可以使用 parseFloat
删除前导零。
//Everything above this remains the same.
// Remove leading zeros.
const ms = temp_ms
? parseFloat("0." + temp_ms)
.toString()
.split(".")[1]
: "";
const showTime = `${hms}${ms ? "." + ms : ""}`;
return showTime;
- Remove insignificant trailing zeros from a number?
- Remove leading zeros using regular expression
- More ways to remove leading zeros
演示
https://jsfiddle.net/c59zsLux/1/
我想做什么
我想通过moment.js删除毫秒部分的零填充。
例子
0:00:00.000 → 0:0:0
0:16:55.404 → 0:16:55.404
1:00:30.100 → 1:0:30.1
1:09:01.770 → 1:9:1.77
条件
- 毫秒部分最多三位。
- 我想从那里删除尾随零。
- 如果所有数字都为零,则不会显示毫秒部分。
我的工具
/**
* タイムスタンプを整形して返す
*
* @param {string|integer} 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);
}
我不知道如何在 moment.js 选项中执行此操作,所以我自己实现了它。
我需要你们的一切
如果有更聪明的方法来做到这一点,或者如果它可以通过 moment.js 中的某些选项实现,请告诉我。
谢谢!
如果你知道传入时间的格式,你可以直接告诉 momentum moment.utc()
中的格式。例如,
const time = moment.utc("09:08:09.100", "hh:mm:ss.S"); // Old format here.
const formattedTime = time.format("h:m:s.S"); // New format here.
console.log(formattedTime); // 9:8:9.1
参考:moment(String, String). If you have more than one incoming formats you can pass them in an array - moment(String, String[])
在你的代码中,虽然我不确定传入的格式。但是可以肯定的是,时刻正在删除小时、分钟和秒的前导零。在毫秒的情况下,您可以使用 parseFloat
删除前导零。
//Everything above this remains the same.
// Remove leading zeros.
const ms = temp_ms
? parseFloat("0." + temp_ms)
.toString()
.split(".")[1]
: "";
const showTime = `${hms}${ms ? "." + ms : ""}`;
return showTime;
- Remove insignificant trailing zeros from a number?
- Remove leading zeros using regular expression
- More ways to remove leading zeros