【问题标题】:Using moment.js, How can I simplify a duration to its most simplified form?使用 moment.js,如何将持续时间简化为最简化的形式?
【发布时间】:2017-02-07 08:16:59
【问题描述】:

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

moment.duration(dur)

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

返回这个:PT15336H1S

显然 15336 小时对于持续时间来说不是一个非常有用的数字。

我找到了解决方法:moment.duration(moment.duration(d)._data).toISOString()

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

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"

所以很明显这种方法有效,但感觉非常hacky。肯定有一个 moment.js 函数或更简洁的方法来做到这一点?

【问题讨论】:

  • “很明显 15336 小时在一段时间内不是一个非常有用的数字。”你想在这里完成什么? toISOString 返回符合 ISO8601 的字符串,它不需要小时/分钟/等不结转en.wikipedia.org/wiki/ISO_8601#Durations

标签: javascript momentjs


【解决方案1】:

这是momentjs 中的一个漏洞(恕我直言)。即使在您的持续时间上使用humanize(),也会给出一个不太具体的2 years

在这两个 GitHub 问题中有更多详细信息:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    相关资源
    最近更新 更多