根据分钟和小时或天和小时的字符串计算分钟数



我有一个函数,它采用一串小时和分钟或天和小时并将其转换为分钟。

calculate(s) {
const matches = /(?:(d+) hours?)? ?(?:(d+) mins?)?/.exec(s);
return Number(matches[1] || 0) * 60 + Number(matches[2] || 0);
};

如果输入是:

console.log(calculate('1 hour 5 mins')); // 65
console.log(calculate('2 hours 1 min')); // 121
console.log(calculate('3 hours')); // 180
console.log(calculate('10 mins')); // 10

但是,如果输入是:

console.log(calculate('1 day 5 hours'));
console.log(calculate('2 days 15 hours'));
console.log(calculate('3 days 16 hours 32 mins'));

只需使用相同的逻辑在小时部分前面添加天数部分:

(?:(d+) days? ?)?(?:(d+) hours? ?)?(?:(d+) mins?)?

在代码中,这将是:

function calculateMinutes(s) {
const matches = /(?:(d+) days? ?)?(?:(d+) hours? ?)?(?:(d+) mins?)?/.exec(s);
return   Number(matches[1] || 0) * 24*60
+ Number(matches[2] || 0) * 60
+ Number(matches[3] || 0);
};
console.log(calculateMinutes('1 hour 5 mins')); // 65
console.log(calculateMinutes('2 hours 1 min')); // 121
console.log(calculateMinutes('3 hours')); // 180
console.log(calculateMinutes('10 mins')); // 10
console.log(calculateMinutes('1 day 5 hours')); // 1740
console.log(calculateMinutes('2 days 15 hours')); // 3780
console.log(calculateMinutes('3 days 16 hours 32 mins')); // 5312
console.log(calculateMinutes('2 hours')); // 120
console.log(calculateMinutes('1 day')); // 1440
console.log(calculateMinutes('1 day 16 hours'));

正则表达式小提琴

以下解决方案适用于所有示例。如果您跳过某些单元,也可以工作,例如1 day 3 mins(无小时(,或将单位按顺序排列,例如5 mins 10 hours.

function calculate(time) {
// split string into words
let times = time.split(/s+/);

let totalMinutes = 0;
while (times.length > 0) {
// get quantity from number in pair
let quantity = Number(times.shift());
// get unit of measurement from pair
let unit = times.shift();
let multipler;
if (/day/.test(unit)) {
// there are 60 * 24 minutes in a day
multipler = 60 * 24;
} else if (/hour/.test(unit)) {
// there are 60 minutes in an hour
multipler = 60;
} else { // assuming minute
// there's 1 minute in a minute
multipler = 1;
}
// add to the total amount of minutes
totalMinutes += quantity * multipler;
}
return totalMinutes;
}
console.log(calculate('1 hour 5 mins')); // 65
console.log(calculate('2 hours 1 min')); // 121
console.log(calculate('3 hours')); // 180
console.log(calculate('10 mins')); // 10
console.log(calculate('1 day 5 hours')); // 1740
console.log(calculate('2 days 15 hours')); // 3780
console.log(calculate('3 days 16 hours 32 mins')); // 5312
console.log(calculate('2 hours')); // 120
console.log(calculate('1 day')); // 1440

最新更新