javascript - 如何将“1h30m”样式持续时间解析为 Moment.js 持续时间
问题描述
我想尝试将持续时间字符串转换为 moment.js 持续时间对象。字符串格式的示例如下:“1h30m”,应对应于 1 小时、30 分钟和 0 秒。
我的第一个想法是使用正则表达式,这样我就可以拉出小时、分钟和秒,但我觉得有一种更有效的方法来处理它——最终目标是使用这些来计算命令运行前的时间——我看到有一个名为momentjs的库,我觉得它可以处理这个问题,但是文档没有给出一个明确的方法来处理我想到的格式的持续时间格式。我可以提供到目前为止我编写的代码,尽管我认为它不会有太大帮助。
解决方案
是的,您可以使用 moment.js 来执行此操作 - 但我不确定这是否是绝对必要的,因为它也可以通过简单的字符串操作来完成。
字符串操作方法:
function parseTimeSpan(timeString) {
let parts = timeString.split("h");
return {
hours: Number(parts[0]),
minutes: Number(parts[1].slice(0, -1))
};
}
请注意,这仅适用于同时包含小时和分钟组件的字符串,并且不支持秒。
Moment.JS 方法:
function parseTimeSpan(timeString) {
return moment.duration("PT" + timeString.toUpperCase());
}
这种方法更健壮,可以处理更多的用例,但速度较慢并且需要外部库。
推荐阅读
- java - proguard 死代码分析给出了私有字段的误报
- ios - Bundle.preferredLocalizations(from:) 如何工作
- qt - Qt/ Qml Frobihser 字体在 Linux 和 Windows 环境中的行为不同
- angular - scrollIntoView 锚定在不同的组件中
- rules - Essbase 中的数据导出
- git - git status --ignored 无限期挂起
- ignite - Kafa-streamer,随着时间的推移变慢
- regex - Groovy vs Jenkins - 带有闭包的正则表达式 replaceFirst/replaceAll 函数在 Jenkins 共享库中的工作方式不同
- spring-boot - 单个微服务的基于角色的访问 (Zuul & Oauth 2.0)
- netsuite - 如何在不使用 SuiteAnalytics 的情况下将数据从 Netsuite 提取到任何数据库