开发者问题收集

使用 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