J'ai une durée au format ISO 8601, par exemple: PT5M ou PT120S.
Existe-t-il un moyen de les analyser en utilisant moment.js et de récupérer le nombre de minutes spécifié dans la durée?
Je vous remercie!
PS: j'ai regardé analyser les durées ISO 8601 et convertir le format d'heure ISO 8601 en durée normale
mais tenait à savoir si cela était faisable avec le moment.
moment fait analyse des durées au format ISO hors de la boîte avec le moment.duration
méthode:
moment.duration('P1Y2M3DT4H5M6S')
Le regex est génial , mais prend en charge un certain nombre de cas Edge et est assez bien testé .
Il ne semble pas être l'un des formats pris en charge: http://momentjs.com/docs/#/durations/
Il n'y a pas de pénurie de dépôts github qui le résolvent avec regex (comme vous l'avez vu, sur la base des liens que vous avez fournis). Cela le résout sans utiliser Date. Y a-t-il même un besoin de moment?
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;
}
Si vous le testez:
minutesFromIsoDuration ("PT120S");
minutesFromIsoDuration ("PT5M");
5
Si vous voulez la durée logique en minutes, vous pourriez vous en sortir avec:
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])
});
suivi par
result.as("minutes");