Как обрабатывать длительность форматирования ISO 8601 с использованием момента .js?

У меня есть длительность отформатированного ISO 8601, например: PT5M или PT120S.

Можно ли каким-либо образом проанализировать их с помощью параметра moment.js и выбрать количество минут, указанное в длительности?

Спасибо!

PS: Я посмотрел на длительность периода ISO 8601. и Преобразование формата времени ISO 8601 в обычное время

но был заинтересован в том, удалось ли это сделать с моментом.

Ответы

Ответ 2

Он не является одним из поддерживаемых форматов: http://momentjs.com/docs/#/durations/

Нет недостатка в репозиториях github, которые решают его с помощью регулярного выражения (как вы видели, на основе предоставленных ссылок). Это разрешает его без использования Date. Есть ли необходимость в моменте?

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;
}

Если вы протестируете его:

minutesFromIsoDuration ( "PT120S" );

0

minutesFromIsoDuration ( "PT5M" );

5

Если вам нужна логическая продолжительность в минутах, вы можете уйти с:

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])
});

за которым следует

result.as("minutes");