使用moment.js,如何将持续时间简化为最简化的形式?

时间:2017-02-06 23:35:26

标签: javascript momentjs

使用Moment.js将毫秒转换为持续时间:

moment.duration(dur)

然后输出一个字符串:moment.duration(dur).toISOString()

返回:PT15336H1S

显然15336小时不是一段非常有用的数字。

我找到了一个解决方法来执行此操作:moment.duration(moment.duration(d)._data).toISOString()

因为duration._data返回这个精确简化形式的json对象, 将它传回构造函数 正确返回我想要的字符串。 例如:

var d = 55209601000; //milliseconds
var initialDuration = moment.duration(d)
console.log(initialDuration._data);
//{
// days:30,
// hours:0,
// milliseconds:0,
// minutes:0,
// months:8,
// seconds:1,
// years:1
//}
console.log(initialDuration.toISOString());
// "PT15336H1S"

var newDuration = moment.duration(initialDuration._data);
console.log(newDuration.toISOString());
// "P1Y8M30DT1S"

显然这种方法很有效,但感觉非常黑客。当然有一个时刻.js功能或更清洁的方式来做到这一点?

1 个答案:

答案 0 :(得分:0)

这是momentjs中的一个洞(imho)。即使在您的持续时间内使用humanize()也会给出一个不太具体的2 years

这两个GitHub问题有更详细的内容:

  1. https://github.com/moment/moment/issues/463

  2. https://github.com/moment/moment/issues/1048

  3. 似乎流行的观点只是安装和使用这个插件:

    https://github.com/jsmreese/moment-duration-format