【问题标题】:Convert thousands of seconds to h:mm:ss in moment.js在 moment.js 中将数千秒转换为 h:mm:ss
【发布时间】:2015-09-27 23:29:14
【问题描述】:

我一直在浏览文档,但我不确定我做错了什么。我需要将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

【问题讨论】:

标签: javascript momentjs


【解决方案1】:

当您使用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");

【讨论】:

  • 是的,除非这在 24 小时或更长时间内不起作用。
  • 谢谢。我在文档中找不到他们告诉您发送空对象的部分...
  • @discardthis: ¨没有空对象的例子,但是"省略的单位默认为0或者当前的日月年。"并且没有要求存在的任何属性。
【解决方案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}`)

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

【讨论】:

  • 是的,但是您需要对分钟和秒字段进行零填充,并从小时和分钟字段中截断小数。
【解决方案3】:

使用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");

【讨论】:

    猜你喜欢
    • 2015-09-29
    • 2022-07-21
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多