Ответ 1
момент делает обрабатывает длительность в формате ISO из метода moment.duration
:
moment.duration('P1Y2M3DT4H5M6S')
Регулярное выражение gnarly, но поддерживает ряд реберных случаев и довольно тщательно тестирование.
У меня есть длительность отформатированного ISO 8601, например: PT5M или PT120S.
Можно ли каким-либо образом проанализировать их с помощью параметра moment.js и выбрать количество минут, указанное в длительности?
Спасибо!
PS: Я посмотрел на длительность периода ISO 8601. и Преобразование формата времени ISO 8601 в обычное время
но был заинтересован в том, удалось ли это сделать с моментом.
момент делает обрабатывает длительность в формате ISO из метода moment.duration
:
moment.duration('P1Y2M3DT4H5M6S')
Регулярное выражение gnarly, но поддерживает ряд реберных случаев и довольно тщательно тестирование.
Он не является одним из поддерживаемых форматов: 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");