Qri*_*ous 29 javascript momentjs
我有ISO 8601格式的持续时间,例如:PT5M或PT120S.
有什么方法可以使用moment.js解析这些并获取持续时间中指定的分钟数吗?
谢谢!
PS:我查看了Parse ISO 8601持续时间 并将ISO 8601时间格式转换为正常持续时间
但是很想知道这是否可以随时使用.
小智 42
时刻确实 使用以下方法解析ISO格式的持续时间moment.duration:
moment.duration('P1Y2M3DT4H5M6S')
Run Code Online (Sandbox Code Playgroud)
在正则表达式是粗糙的,但支持了一些边缘的情况下,倒也彻底测试.
它似乎不是受支持的格式之一:http://momentjs.com/docs/#/durations/
使用正则表达式来解决它的github repos并不缺乏(正如您所看到的,基于您提供的链接).这解决了它而不使用日期.甚至还需要片刻吗?
var regex = /P((([0-9]*\.?[0-9]*)Y)?(([0-9]*\.?[0-9]*)M)?(([0-9]*\.?[0-9]*)W)?(([0-9]*\.?[0-9]*)D)?)?(T(([0-9]*\.?[0-9]*)H)?(([0-9]*\.?[0-9]*)M)?(([0-9]*\.?[0-9]*)S)?)?/
minutesFromIsoDuration = function(duration) {
var matches = duration.match(regex);
return parseFloat(matches[14]) || 0;
}
Run Code Online (Sandbox Code Playgroud)
如果你测试它:
minutesFromIsoDuration( "PT120S");
0
minutesFromIsoDuration( "PT5M");
五
如果你想要几分钟的逻辑持续时间,你可能会逃避:
return moment.duration({
years: parseFloat(matches[3]),
months: parseFloat(matches[5]),
weeks: parseFloat(matches[7]),
days: parseFloat(matches[9]),
hours: parseFloat(matches[12]),
minutes: parseFloat(matches[14]),
seconds: parseFloat(matches[16])
});
Run Code Online (Sandbox Code Playgroud)
其次是
result.as("minutes");
Run Code Online (Sandbox Code Playgroud)