【问题标题】:Formatting MomentJS duration above 24 hours格式化 MomentJS 持续时间超过 24 小时
【发布时间】:2017-08-11 07:18:12
【问题描述】:

我想格式化总工作时间,例如49.75 到此:49:45

当我像这样使用持续时间时:

const dur = moment.duration(49.75, 'hours').asMilliseconds();
moment.utc(dur).format("HH:mm:ss") // 01:45:00

我会收到 01:45:00 而不是 49:45:00

有没有办法在不丢失天数的情况下格式化(而不是 HH)持续时间?

【问题讨论】:

  • 正如您在示例中看到的那样,到目前为止我使用的是 moment.duration。缺少的是一个适当的格式化函数,或者至少是一个 momentJS 插件

标签: javascript momentjs


【解决方案1】:

我认为您不能使用格式,而是手动构建它:

var dur = moment.duration(49.75, 'hours');
var hours = Math.floor(dur.asHours());
var mins  = Math.floor(dur.asMinutes()) - hours * 60;
var sec   = Math.floor(dur.asSeconds()) - hours * 60 * 60 - mins * 60;

var result = hours + ":" + mins + ":" + ((sec > 9) ? sec : ("0"+sec));
console.log(result); // 49:45:00

Fiddle


希望有人能找到更优雅的方式

【讨论】:

  • 您的解决方案是我目前所拥有的。我认为 momentJS 中内置了一个格式化功能,或者至少是一个 momentJS 插件。
  • 不错的技巧!我比使用持续时间格式插件更喜欢它
【解决方案2】:

我向你推荐这个answer

您可以为持续时间添加格式,它的工作时间超过 24 小时。

function(input) {
    input = input || '';
    var out = '';
    var dur = moment.duration(input, 'minutes');
    return dur.format('HH:mm:ss');
};

希望对你有帮助!

编辑:

此代码使用duration-format插件!

【讨论】:

  • 对于 moment.duration() 没有格式功能。所以上面的代码根本不起作用。
  • 它只是一段代码,你检查我链接的整个答案吗?
  • 上面的代码依赖于来自jsmreese 的插件并且不能单独工作。在您的回答中强调这一点会很棒。
  • 你是对的!我编辑了我的答案,我不想误导任何人。 :)
【解决方案3】:

如果您一次修改一秒,则可以大大简化(解析和更新)。

灵感来自这个答案:https://stackoverflow.com/a/45629433/11121690

incrementTime: (sectionKey, itemKey) => {
    const pad = (number) => `${number > 9 ? number : "0" + number}`;
    const timeString = STATS_DATA_UTIL.getByParts(sectionKey, itemKey);
    const parts = timeString.split(':');
    let uiSecs = parseInt(parts[2]);
    let uiMins = parseInt(parts[1]);
    let uiHrs = parseInt(parts[0]);

    uiSecs++;
    if (uiSecs === 60) {
        uiSecs = 0; uiMins++;
        if (uiMins === 60) uiMins = 0; uiHrs++;
    }

    const result = `${pad(uiHrs)}:${pad(uiMins)}:${pad(uiSecs)}`;
    STATS_DATA_UTIL.setByParts(sectionKey, itemKey, result);
},

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 2012-12-08
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多