Это не тривиальная проблема, если вы хотите решить ее правильно!
Я бы предложил использовать одну из библиотек, которая позволяет легко разбирать даты и иметь функции сравнения.
Первое, что приходит мне в голову, это moment.js
, который имеет удивительный способ сравнения длительностей - moment-duration
.
Длительность момента, однако, должна быть построена с использованием следующего синтаксиса, например:
let duration = moment.duration(1, 'minutes);
(подробнее здесь: https://momentjs.com/docs/#/durations/creating/)
Вам нужно разбить строки длительности на части, состоящие из числа и единицы длительности:
let str1 = '2 Hours 15 Minutes';
let durationStrings = str1.match(/\d+ [a-zA-Z]+/g);
После этого шага, у вас будет массив строк примерно такого типа:
['2 hours', '15 minutes'];
После этого нам нужно разделить строки во второй раз, чтобы построить правильную длительность. Затем мы будем использовать наши значения дляокончательная продолжительность строительства:
// Create empty duration first...
let duration = moment.duration();
durationStrings.forEach((durationString) => {
let durationArguments = durationString.split(' '); // We just use space as delimiter
if (durationArguments.length === 2) {
duration.add(Number(durationArguments[0]), durationArguments[1]);
}
});
console.log(duration);
Если вы проверяете объект окончательной продолжительности, он должен содержать правильную длительность после итераций.
Давайте теперь обернем его в функцию с именем convertToDuration(string)
.
Обратите внимание на две вещи:
- Мы предполагаем, что каждый
durationString
содержит число, затем пробел, а затем выражение продолжительности - . Мы должны преобразовать
string
в number
в цикле, так как moment-duration
предполагает, что первый аргумент является числом
Теперь единственное, что нужно сделать, - это построить обе продолжительности, как указано выше, и сравнить их, например, с помощью:
let duration1 = convertToDuration(str1);
let duration2 = convertToDuration(str2);
// If duration subtraction is negative, first one is smaller!
let subtractionResult = duration1.subtract(duration2).as('milliseconds');
if (subtractionResult < 0) {
// Your logic here
}
Мое решение можно найти здесь: https://jsbin.com/berijuduza