MomentJS分钟转H:mm格式问题:超23:59时结果异常
解决MomentJS转换超时长分钟到H:mm格式的问题
嘿,我明白你遇到的问题了——MomentJS在这里掉链子是因为它本质上是处理日期时间点的,不是用来计算累计时长的!你用startOf('day').add(...)的方式,其实是在往“当天0点”这个时间点上加分钟,超过24小时的部分会自动进位到下一天,而format('H:mm')只会提取当前日期的小时和分钟,所以多余的时长就被丢掉了。比如2273分钟等于37小时53分,减去24小时后剩下13小时53分,这就是你得到错误结果的原因。
下面给你两种靠谱的解决方案:
方案一:手动计算(最直接高效)
既然我们要的是累计的小时和分钟,完全不需要牵扯日期,直接用基础的数学计算就搞定了:
const totalTimeInMin = 2273; const totalHours = Math.floor(totalTimeInMin / 60); const remainingMinutes = totalTimeInMin % 60; // 保证分钟是两位数(比如5分钟显示为"05") const formattedTime = `${totalHours}:${remainingMinutes.toString().padStart(2, '0')}`; console.log(formattedTime); // 输出 "37:53"
方案二:用MomentJS的Duration API(适合坚持用Moment的场景)
MomentJS其实有专门处理时长的duration对象,用它来计算累计时长就不会有日期进位的问题:
const totalTimeInMin = 2273; const duration = moment.duration(totalTimeInMin, 'minutes'); // 计算总小时数:天数×24 + 剩余小时数 const totalHours = duration.days() * 24 + duration.hours(); // 剩余分钟数直接用duration的方法获取 const remainingMinutes = duration.minutes(); const formattedTime = `${totalHours}:${remainingMinutes.toString().padStart(2, '0')}`; console.log(formattedTime); // 输出 "37:53"
小提醒
以后处理时长计算的时候,别再用日期加减的方式啦!MomentJS的日期格式化是给具体时间点用的,比如“2024-05-20 14:30”这种,而累计时长(比如37小时53分)属于另一种场景,用duration或者手动计算才是正确的打开方式~
内容的提问来源于stack exchange,提问作者AddyProg
相关产品推荐
相关产品推荐

