繁体   English   中英

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

[英]How to format decimal hours greater than 24 hours into hours minutes in JavaScript

我已经看到许多关于十进制小时到小时:分钟的帖子,但是我发现没有任何事情可以用超过一天的时间了。

我在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.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; 
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM