如何使用Moment.js解析时长?特定格式时长是否有内置解析函数?
关于Moment.js时长解析的问题解答
嘿,针对你问的两个Moment.js时长解析问题,我来给你详细说说:
1. 如何使用Moment.js解析时长?
Moment.js里解析时长主要靠moment.duration()方法,它支持多种传入方式:
- 直接传入数值+单位:比如要表示2小时30分钟,就这么写:
const duration = moment.duration(2, 'hours').add(30, 'minutes'); // 或者更简洁的对象形式: const duration = moment.duration({ hours: 2, minutes: 30 }); - 传入ISO 8601格式的时长字符串:比如
PT2H30M就代表2小时30分钟,用法是:const duration = moment.duration('PT2H30M');
拿到duration对象后,你还可以用它的方法获取具体的时长数值,比如duration.asHours()会返回总小时数(上面的例子会返回2.5),duration.minutes()会返回剩余的分钟数(30),非常灵活。
2. 针对'HH:mm'格式的时长,Moment.js有没有内置解析函数?
很遗憾,Moment.js并没有直接支持解析HH:mm这种自定义格式为时长的内置函数——它的moment.duration()默认只认ISO格式或者数值+单位的组合。不过我们可以自己写个简单的函数来处理这种格式,比如你说的14:45代表14小时45秒,代码可以这么写:
function parseHHmmDuration(timeStr) { // 拆分小时和秒,转成数字 const [hours, seconds] = timeStr.split(':').map(Number); // 创建duration对象 return moment.duration({ hours, seconds }); } // 调用示例 const myDuration = parseHHmmDuration('14:45'); console.log(myDuration.asSeconds()); // 输出:14*3600 +45 = 50445秒
如果其实你的14:45是代表14小时45分钟(这种场景其实更常见),只需要把函数里的seconds改成minutes就行:
function parseHHmmDuration(timeStr) { const [hours, minutes] = timeStr.split(':').map(Number); return moment.duration({ hours, minutes }); }
这样就能轻松把HH:mm格式的字符串转换成Moment.js的duration对象啦~
内容的提问来源于stack exchange,提问作者TSR
相关产品推荐
相关产品推荐

