【问题标题】:How to format decimal hours greater than 24 hours into hours minutes in JavaScript如何在 JavaScript 中将大于 24 小时的十进制小时格式化为小时分钟
【发布时间】:2017-03-27 09:13:30
【问题描述】:

我看过很多关于十进制小时到小时:分钟的帖子,但我没有发现任何可以使用超过一天的帖子。

我在 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 小时,例如我有一个小时来代表一年以上。

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

提前感谢您的帮助

【问题讨论】:

  • 嗨@peterc,你能举一个你的函数的执行输入预期输出的例子吗?那么我们也许可以更好地帮助您。
  • 如何做到这一点的答案可以找到here

标签: javascript momentjs


【解决方案1】:

我不知道 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) 的任何十进制输入,您可以对其进行改进以处理月份等。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 这看起来像我想要的,但我无法让插件工作。我正在尝试在 TypeScript 中使用它(应该与 JavaScript 相同)。我知道我没有提到这一点,因为我认为这不会成为问题(即 TS 而不是 JS)。已为此 here 添加了单独的帖子。
    【解决方案3】:

    // 这是 angular 中的 moment.js

    列表:任何 = ["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; 
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-25
      相关资源
      最近更新 更多