如何在 JavaScript 中将大于 24 小时的十进制小时格式化为小时分钟



>我看过很多关于十进制小时到小时:分钟的帖子,但我还没有找到任何超过一天的工作。

我正在使用以下内容.js..

function formatHours(decimalHours) {
    var duration = moment.duration(decimalHours, 'hours');
    var hours = duration.hours();
    var minutes = duration.minutes();
    var date = moment().hours(hours).minutes(minutes);
    var result = date.format('HH:mm');
    return result;
  }

但这不适用于超过 24 小时,例如我有一个小时代表一年多。

有没有办法处理这个问题,以及当前语言环境的格式(就像时刻应该做的那样(

提前感谢您的任何帮助

我不知道Moment.js是什么,我不确定你到底想实现什么。但是,如果我理解得很好,您希望能够将十进制小时(随心所欲地高(转换为日期。

我可以向你推荐这段代码:

function formatHours(decimalHours) {
    let minutes = decimalHours % 1;
    let hours = decimalHours - minutes;
    minutes *= 60;
    minutes = Math.round(minutes);
    if (hours > 24) {
        var day = Math.floor(hours / 24);
        hours %= 24;
    }
    let date = new Date();
    date.setHours(hours);
    date.setMinutes(minutes);
    if (day) {
        date.setDate(day);
    }
    console.log(`${date}`);
}
formatHours(24.88);

这将处理高达 672.00 (28*24( 的任何十进制输入,您可以改进它以处理月份等。

正如评论者所问,您在寻找什么格式?

我建议添加时刻持续时间格式的插件,它似乎只是为您的用例编写的。然后你可以简单地写:

function formatHours (decimalHours) {
  return moment.duration.format(hoursDecimal, 'hours').format('D:HH:mm');
};

//这是暂时的.js在角度

list : any = ["9:12","4:35","9:11"];//正确声明

for(var i=0 ; i < 3; i++){
    var parts = this.list[i].split(":");;
    var hours =  parseInt(parts[0]) ;
    var minutes = parseInt(parts[1]); 
    this.a = moment.duration(this.a._data.hours,'hours').add(hours,'hours').add(this.a._data.minutes,'minutes').add(minutes,'minutes');
  }
  var totalHours = (24 * this.a._data.days) + this.a._data.hours ;
  var total = totalHours + ":" +this.a._data.minutes; 
  }

最新更新