[英]Calculate minutes from string of minutes and hours or days and hours
我有一个函数,它需要一串小时和分钟或几天和几小时并将其转换为分钟。
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
(no hours),或者将单位5 mins 10 hours
,例如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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.