我尝试使用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()
答案 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;