使用时刻以hh:mm:ss显示秒数

时间:2018-01-02 16:20:41

标签: javascript momentjs

我尝试使用moment显示已用时间。

我的功能收到ISO日期/时间值。使用moment,可以轻松计算已用时间,但格式化无效。

这是我到目前为止所得到的:

formatElapsedTime(myIsoDateTimeValue) {

   var momentStart = moment(myIsoDateTimeValue);
   var momentNow = moment();
   var elapsedTime = momentNow.diff(momentStart, 'seconds').toString('H:mm:ss');
}

这是我得到的错误:

  

未捕获的RangeError:toString()基数参数必须介于2和之间   36在Number.toString()

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

使用Moment.js formatters

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.

答案 2 :(得分:0)

您的代码存在的问题是.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;