You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript 不使用Math.floor将总分钟数转换为天、小时、分钟

分钟转天/小时/分钟整数格式实现方案

问题背景

需要将接口获取到的总时长分钟值,转换为天:小时:分钟的整数格式,初始实现代码如下:

var duration = getControlValue('incident','incident_open_duration');
var formattedDuration = duration/24/60 + ":" + duration/60%24 + ':' + duration%60);
alert(formattedDuration);

以上代码存在两个问题:

  • 语法错误:拼接语句末尾多写了一个右括号
  • 计算结果带小数:当总分钟数为8289.66时,返回结果为5.756708333333333:18.161:9.659999999999854,不符合整数展示要求
    尝试使用Math.floor做向下取整,但当前开发环境不支持该函数,需要兼容的替代实现。

替代取整方案

针对正数时长的取整场景,以下三种方式都可以实现和Math.floor一致的截断小数效果,兼容性远高于Math对象方法:

  • 用parseInt(数字, 10):自动截断小数部分返回整数,是适配性最高的方案,几乎所有JS运行环境都支持
  • 用双按位非~~数字:通过位运算隐式转整数,对正数向下取整,性能较好
  • 用按位或0数字 | 0:和双按位非逻辑一致,写法更简洁

修正后可运行代码

推荐使用parseInt方案,避免位运算在超大数字场景下的溢出问题,同时做分步计算减少累计误差:

var duration = getControlValue('incident','incident_open_duration');
var days = parseInt(duration / (24 * 60), 10);
var leftAfterDays = duration - days * 24 * 60;
var hours = parseInt(leftAfterDays / 60, 10);
var minutes = parseInt(leftAfterDays - hours * 60, 10);

// 如果需要单数字补前导零(比如显示为05:03:09)可以放开下面注释
// days = days < 10 ? '0' + days : days;
// hours = hours < 10 ? '0' + hours : hours;
// minutes = minutes < 10 ? '0' + minutes : minutes;

var formattedDuration = days + ":" + hours + ":" + minutes;
alert(formattedDuration);

传入8289.66测试时,返回结果为5:18:9,完全符合整数格式要求。

内容的提问来源于stack exchange,提问作者ns046

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 18:48:28