javascript - 使用 moment.js 如何在一段时间内提供特定格式

标签 javascript momentjs

给定来自 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/

相关文章:

javascript - 如何从特定搜索 ID 中计算 javascript 数组对象中的值?

javascript - 单击按钮时连续重复翻转动画?

javascript - 使用时区偏移获取时区名称/列表

javascript - MomentJS - 将日期时间从 UTC 转换为不同的时区

javascript - Chrome 扩展 javascript,更改文本区域中选定的文本

javascript - 如何使用 javascript 滚动到列表组项目

javascript - 在 Moment.js 中是否有更好的方法来获取 isPM?

momentjs - 即使设置语言环境,moment.js 也不会解析英国格式日期

javascript - 如何在 javascript 中获取今天、昨天或日期名称

javascript - 从 Android WebView 中删除特定的类/标签