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

如何在JavaScript中将大于24小时的十进制小时格式化为小时分钟,javascript,momentjs,Javascript,Momentjs,我看过很多关于十进制小时到小时:分钟的帖子,但我没有发现任何一篇能工作超过一天的帖子 我将以下内容与矩.js一起使用 function formatHours(decimalHours) { var duration = moment.duration(decimalHours, 'hours'); var hours = duration.hours(); var minutes = duration.minutes(); var date = moment

我看过很多关于十进制小时到小时:分钟的帖子,但我没有发现任何一篇能工作超过一天的帖子

我将以下内容与矩.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');
};

//这是angular中的moment.js

列表: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; 
  }
for(变量i=0;i<3;i++){
var parts=this.list[i].split(“:”);;
var小时数=parseInt(部分[0]);
var minutes=parseInt(第[1]部分);
this.a=时刻持续时间(this.a._data.hours,'hours')。添加(hours,'hours')。添加(this.a._data.minutes,'minutes')。添加(minutes,'minutes');
}
var totalHours=(24*this.a._data.days)+this.a._data.hours;
var total=totalHours+“:”+此.a.\u数据.min;
}

Hi@peterc,您能给出一个函数执行输入和预期输出的示例吗?然后我们可能会帮助你更好一点。如何做到这一点的答案可以找到这看起来像我想要的,但我无法让插件工作。我试图在TypeScript中使用它(它应该与JavaScript相同)。我知道我没有提到这一点,因为我认为这不会成为一个问题(即TS而不是JS)。已经为此添加了一个单独的帖子。如何使用在这里。。。