如何在Angular中正确将毫秒数格式化为dd:hh:mm:ss格式
问题原因
你目前的实现存在两个核心问题:
new Date(milliseconds)生成的是时间点(1970年1月1日UTC 00:00:00加上对应毫秒的时刻),不是时间间隔,formatDate的dd标识符取的是该日期的当月天数,自然和你要的间隔天数不匹配- formatDate默认会按照本地时区格式化时间,时区偏移会导致小时、甚至日期出现额外的增量,这就是你得到01:01:03:26的原因
解决方案
直接手动计算每个单位的数值,再补零格式化即可,代码如下:
showTimeWithHour(milliSeconds: number): string { // 定义各单位对应的毫秒数 const oneDay = 24 * 60 * 60 * 1000; const oneHour = 60 * 60 * 1000; const oneMinute = 60 * 1000; const oneSecond = 1000; // 计算各单位数值 const days = Math.floor(milliSeconds / oneDay); const remainingAfterDays = milliSeconds % oneDay; const hours = Math.floor(remainingAfterDays / oneHour); const remainingAfterHours = remainingAfterDays % oneHour; const minutes = Math.floor(remainingAfterHours / oneMinute); const remainingAfterMinutes = remainingAfterHours % oneMinute; const seconds = Math.floor(remainingAfterMinutes / oneSecond); // 补零格式化,不足两位前面补0 const padZero = (num: number) => num.toString().padStart(2, '0'); return `${padZero(days)}:${padZero(hours)}:${padZero(minutes)}:${padZero(seconds)}`; }
传入206000毫秒测试,可直接得到预期结果00:00:03:26。
内容的提问来源于stack exchange,提问作者govit19
相关产品推荐
相关产品推荐

