使用moment.js如何为持续时间

时间:2017-07-18 15:52:16

标签: javascript momentjs

给定来自API的持续时间为duration_seconds = 86485的API。

(1天,0小时,1分钟,1秒)

我打算使用moment.js将其转换为格式化的持续时间,如下所示:

 1. {d} {hh}:{mm}:{ss} (1d 00:01:01)
 2. {d}d {hh}h m{mm} s{ss} (1d 04h 30m 23s)

我还想确保以下内容:

  • 如果天数为0(00:01:01 - 1分钟1秒)
  • ,则会修剪天数
  • hh:mm:ss永远不会被修剪,1秒显示为00:00:01

我可以像这样创建持续时间:

moment.duration(duration_seconds, 'seconds')

人性化功能不适合,因为它近似。 我也可以自己编写:

duration.get('d')
duration.get('h')
duration.get('m')
duration.get('s')

我似乎无法找到内置功能,但我认为这将是一个明显的功能?是否有我遗漏的东西,否则我可以将其中一个进入片刻库。

这似乎意味着该功能仍然不存在: Using moment.js, How can I simplify a duration to its most simplified form?

2 个答案:

答案 0 :(得分:2)

moment-duration-format插件可以帮助您解决此问题。

Point.getZ()
// your input
var duration_seconds = 86485;

// create a moment-duration object
var duration = moment.duration(duration_seconds, 'seconds');

// format the object with a string
var formatted = duration.format('h[h] m[m] s[s]');

// displaying the output here
document.getElementById('output').innerHTML = formatted;

请注意,默认情况下,它会省略不相关的单位,因此如果您的输入为3,则只会说<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/1.3.0/moment-duration-format.min.js"></script> <div id="output" />,而不是"3s"

如果要更改此行为,请设置"0h 0m 3s"per the documentation。例如,要获取您在评论中提到的格式,请使用:

trim:false

答案 1 :(得分:0)

也许你可以试试这个?

moment(duration).format("DD MMM YYYY hh:mm: a")

虽然您可能需要将秒数转换为毫秒数。这可以通过说duration * 1000来完成。

从这个答案中找到:Moment js convert milliseconds into date and time