将数千秒转换为h:mm:ss in moment.js

时间:2015-09-27 23:29:14

标签: javascript momentjs

我一直在浏览文档而且我不确定我做错了什么。我需要将7200转换为2:00:00。好像很容易?一些尝试:

var duration = 7200;
var display = moment().seconds(duration).format("h:mm:ss");

和...

var duration = 7200;
var display = moment.duration(duration, "seconds"); //can't chain on a format method?

格式重新正确,但数字都错了。如果我使用的持续时间为Math.round(7025.526)7025.526,我会回复9:19:06

如何成功将秒数转换为h:mm:ss

3 个答案:

答案 0 :(得分:4)

当您使用moment().seconds(duration)时,它将占用当前日期和时间,然后将秒组件设置为该值(溢出为分钟和小时)。如果您在不同时间尝试,您会看到结果发生变化。

持续时间对象无法格式化为日期,因为它不是日期。它是一段时间,没有任何明确的起点或终点。

要转换秒数,首先要创建一个空的时刻对象,它将是当前日期和时间0:00:00。然后你可以设置秒数,这会在几分钟和几小时内完成。

您可能希望使用H而不是h来格式化小时数。这样可以避免将时间少于一小时12:nn:nn而不是0:nn:nn

var duration = 7200;
var display = moment({}).seconds(duration).format("H:mm:ss");

答案 1 :(得分:2)

let duration = seconds;
let hours = duration/3600;
duration = duration % (3600);

let min = parseInt(duration/60);
duration = duration % (60);

let sec = parseInt(duration);

if (sec < 10) {
  sec = `0${sec}`;
}
if (min < 10) {
  min = `0${min}`;
}
if (parseInt(hours, 10) > 0) {
  return (`${parseInt(hours, 10)} : ${min} : ${sec}`)
}
return (`${min} : ${sec}`)

您可以通过计算小时分和秒来手动完成

答案 2 :(得分:0)

使用moment-duration-format plugin

var s = moment.duration(ms).format("h:mm:ss");

或者,只是使用片刻:

var d = moment.duration(ms);
var s = Math.floor(d.asHours()) + moment.utc(ms).format(":mm:ss");