【问题标题】:Moment js format durationMoment js格式持续时间
【发布时间】:2019-01-09 14:05:33
【问题描述】:

我得到了一个 ISO 8601 字符串作为持续时间,我需要将其格式化为 XhYm(1h20m)。有人有什么建议吗?

我现在做的是这样的:

const duration = moment.duration(secondData.duration);
const formatted = moment.utc(duration.asMilliseconds()).format('HH:mm');

【问题讨论】:

  • 当你尝试你的代码时出了什么问题?你没有说清楚。还请向我们展示您想要生成声明结果的输入字符串。
  • 输入字符串是 PT1H20M,我想格式化为 1h20m,我的代码格式化为 01:20 @ADyson
  • link 而不是试图看起来很聪明,你帮助我怎么样:)
  • 实际上,我试图澄清你在做什么,以便做到这一点。好的,这是一个持续时间字符串,对不起,我没有完全理解,抱歉误读。但是,请回答secondData 是什么以及您是如何填充它的?该示例仍然不完整。

标签: javascript momentjs


【解决方案1】:

要获得所需的输出格式,您需要在 format() 调用中以不同方式设置格式字符串:

const duration = moment.duration('PT1H20M');
const formatted = moment.utc(duration.asMilliseconds()).format("H[h]m[m]");

使用方括号可以立即打印这些字符,而无需尝试在格式中使用它们。请参阅 momentjs 文档中的 Escaping Characters

【讨论】:

  • 谢谢。就是这样,我查看了文档,但找不到这个。非常感谢。
【解决方案2】:

最简单的方法是手动格式化:

var d = moment.duration("PT1H20M");
console.log(d.hours()+"H"+d.minutes()+"M");
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.min.js"></script>

【讨论】:

  • 您能解释一下为什么您的代码看起来与接受答案中 Joseph 的代码不同吗?
  • @NicoHaase 您具体想知道什么?这只是一种不同的方式,只使用与持续时间相关的函数,而不是先将持续时间导入 momentJS 对象。它可能不太整洁,依赖于一些手动格式化,但它只是获得所需输出的另一种方法。
  • 我只是好奇——moment.duration("PT1H20M") 不是已经返回一个对象了吗?
  • @NicoHaase 是的,确实如此。它返回一个 Duration 对象,而不是 Moment 对象。不过,不确定在这种情况下您所说的“已经”是什么意思?我只是使用 Duration 对象中可用的方法来创建格式,而不是 Joseph 将持续时间转换为毫秒的方法,将其解析为 Moment 对象,然后使用 moment 对象的(更复杂的)格式化选项来创建输出.这能回答你的问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-13
  • 2018-08-28
  • 1970-01-01
相关资源
最近更新 更多