如何在JavaScript中将小数小时超过24小时格式化为小时分钟

时间:2017-03-27 09:13:31

标签: javascript momentjs

我看过很多关于小时数小时到几小时的帖子:分钟,但我发现这些工作的时间不超过一天。

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

Mar 27, 2017 2:39:01 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
Page title is: Google

但这不会超过24小时,例如我有一个小时的时间来代表超过一年。

有没有办法处理这个问题,还有当前区域设置的格式(正如应该做的那样)

提前感谢您提供任何帮助

3 个答案:

答案 0 :(得分:0)

我不知道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)的任何小数输入,你可以改进它来处理月份等等。

答案 1 :(得分:0)

正如评论者问的那样,你在寻找什么样的格式?

我建议添加moment-duration-format插件,它似乎只是为您的用例编写的。然后你可以简单地写:

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

答案 2 :(得分:0)

//这是针对angular.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; 
  }