繁体   English   中英

从分钟和小时或天和小时的字符串计算分钟

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM