首页 > 解决方案 > 如何将“1h30m”样式持续时间解析为 Moment.js 持续时间

问题描述

我想尝试将持续时间字符串转换为 moment.js 持续时间对象。字符串格式的示例如下:“1h30m”,应对应于 1 小时、30 分钟和 0 秒。

我的第一个想法是使用正则表达式,这样我就可以拉出小时、分钟和秒,但我觉得有一种更有效的方法来处理它——最终目标是使用这些来计算命令运行前的时间——我看到有一个名为momentjs的库,我觉得它可以处理这个问题,但是文档没有给出一个明确的方法来处理我想到的格式的持续时间格式。我可以提供到目前为止我编写的代码,尽管我认为它不会有太大帮助。

标签: javascriptmomentjs

解决方案


是的,您可以使用 moment.js 来执行此操作 - 但我不确定这是否是绝对必要的,因为它也可以通过简单的字符串操作来完成。

字符串操作方法:

function parseTimeSpan(timeString) {
  let parts = timeString.split("h");
  return {
    hours: Number(parts[0]), 
    minutes: Number(parts[1].slice(0, -1))
  };
}

JsFiddle在这里

请注意,这仅适用于同时包含小时和分钟组件的字符串,并且不支持秒。

Moment.JS 方法:

function parseTimeSpan(timeString) {
  return moment.duration("PT" + timeString.toUpperCase());
}

JsFiddle在这里

这种方法更健壮,可以处理更多的用例,但速度较慢并且需要外部库。


推荐阅读