使用 moment 显示 hh:mm:ss 中的秒数
2018-01-02
715
我尝试使用
moment
显示已用时间。
我的函数接收 ISO 日期/时间值。使用
moment
,可以轻松计算已用时间,但我的格式不起作用。
这是我目前得到的结果:
formatElapsedTime(myIsoDateTimeValue) {
var momentStart = moment(myIsoDateTimeValue);
var momentNow = moment();
var elapsedTime = momentNow.diff(momentStart, 'seconds').toString('H:mm:ss');
}
这是我收到的错误:
Uncaught RangeError: toString() radix argument must be between 2 and 36 at Number.toString ()
3个回答
moment.diff
返回一个数字,
#Number.ToString
返回一个按参数基数计算的数字
您可能需要使用 moment.duration 您可以执行类似操作
var momentStart = moment(myIsoDateTimeValue);
var momentNow = moment();
var elapsedTime = momentNow.diff(momentStart, 'seconds')
var range = moment.duration(elapsedTime, "seconds");
console.log(range.humanize()) //human readable format
console.log(`${range.hours()}:${range.minutes()}:${range.seconds()}`) // same as format HH:mm:SS
Daniel Krom
2018-01-02
使用 Moment.js 格式化程序 。
var elapsedTime = moment(momentNow.diff( momentStart )).format('H:mm:ss');
console.log(elapsedTime); // Will output the time in the console with the H:mm:ss format.
Ricky Notaro-Garcia
2018-01-02
您的代码存在问题,在带有参数的数字上调用
.toString
时,会尝试使用该参数作为基数:
(255).toString(16)
会返回
0xff
。因此,diff 返回的是您使用无效参数调用 .toString 的数字。
您想执行如下操作:
moment(moment.duration(momentNow.diff(momentStart, 'seconds'), 'seconds')).format('H:mm:ss');
或者手动执行:
let diff = momentNow.diff(momentStart, 'seconds');
let hrs = diff / 3600 | 0;
let min = diff / 60 | 0;
let sec = diff % 60;
console.log(`${hrs}:${min}:${sec}`);
如果您需要填充零,可以使用这个小助手:
let padZeros = n => n < 10 ? `0${n}` : '' + n;
Jared Smith
2018-01-02