如何用Moment.js以hh:mm:ss格式显示时间戳距今时长?
解决Moment.js格式化已流逝时长为hh:mm:ss的问题
问题根源
你得到负数结果是因为时间差的计算方向搞反了:then.diff(now)是用过去的时间戳减去当前时间,结果必然为负。应该反过来用当前时间减去过去时间,才能得到正的流逝时长。
修正后的实现方案
下面是调整后的代码,同时解决负数问题和时分秒的补零格式问题:
const timeDiff = (t) => { const now = moment(); const then = moment(t); // 计算当前时间与过去时间的正差值 const diff = now.diff(then); const dur = moment.duration(diff); // 补零处理,保证时分秒为两位格式 const formatUnit = (unit) => String(unit).padStart(2, '0'); // 计算累计总小时数(包含天数转换的小时,避免超过24小时后截断) const totalHours = dur.days() * 24 + dur.hours(); return `${formatUnit(totalHours)}:${formatUnit(dur.minutes())}:${formatUnit(dur.seconds())}`; }
代码说明
- 计算方向修正:
now.diff(then)获取当前时间到目标时间的正差值,确保时长为正数。 - 补零处理:
padStart(2, '0')保证单个数字的时分秒显示为两位(比如5分钟显示为05)。 - 总小时数计算:如果流逝时长超过24小时,
dur.hours()只会返回当天的小时数(0-23),通过dur.days()*24 + dur.hours()可以得到累计的总小时数,避免截断天数。
测试验证
传入你的时间戳'2022-09-01T13:06:04.401650592Z',函数会返回类似xxx:xx:xx的正数格式结果,符合hh:mm:ss的显示需求。
内容的提问来源于stack exchange,提问作者CourtneyJ
相关产品推荐
相关产品推荐

