给定来自 API 的秒数持续时间 duration_seconds = 86485
。
(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 秒),天数将被 trim - hh:mm:ss 永远不会被 trim ,1 秒显示为
00:00:01
。
我可以这样创建持续时间:
moment.duration(duration_seconds, 'seconds')
humanize 函数不适合,因为它近似。 我也可以自己写:
duration.get('d')
duration.get('h')
duration.get('m')
duration.get('s')
我似乎找不到内置函数,但我认为这是一个显而易见的函数?有没有我遗漏的东西,否则我可以把一个 PR 放到 moment 库中。
这似乎暗示函数仍然不存在: Using moment.js, How can I simplify a duration to its most simplified form?
最佳答案
moment-duration-format插件可以帮助您解决这个问题。
// 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;
<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" />
请注意,默认情况下它会忽略不相关的单位,因此如果您输入 3,它只会说 "3s"
,而不是 "0h 0m 3s"
.
如果你想改变这个行为,设置trim:false
, per the documentation .例如,要获取您在评论中提到的格式,请使用:
.format('hh:mm:ss', { trim: false })
关于javascript - 使用 moment.js 如何在一段时间内提供特定格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45171723/