JS中如何计算天数、小时、分钟总和并转为年度百分比?
嘿,作为JS初学者能想到用毫秒来转换时间单位,这思路已经很靠谱啦!咱们一步步拆解这个问题,慢慢把它解决掉~
解决思路与代码实现
核心逻辑其实很简单:先把所有零散的天、小时、分钟转换成统一单位(方便求和),再算出一年的总时间,最后用总耗时除以一年总时间就能得到年度百分比了。
步骤1:统一时间单位并计算总耗时
咱们先把所有时间转换成分钟(当然用你之前尝试的毫秒也完全没问题,只是分钟数值更小,计算起来更直观):
- 1天 = 24小时 = 24×60 = 1440分钟
- 1小时 = 60分钟
然后用reduce方法遍历数组,把每个对象的时间都转成分钟后累加:
const calculateTime = [ { title: 'a', days: 9, hours: 22, minutes: 32, }, { title: 'b', days: 3, hours: 14, minutes: 0, }, { title: 'c', days: 6, hours: 8, minutes: 0, } ]; // 定义时间转换的系数常量,可读性更强 const MINUTES_PER_HOUR = 60; const MINUTES_PER_DAY = 24 * MINUTES_PER_HOUR; // 计算总分钟数 const totalMinutes = calculateTime.reduce((total, item) => { const itemTotalMinutes = item.days * MINUTES_PER_DAY + item.hours * MINUTES_PER_HOUR + item.minutes; return total + itemTotalMinutes; }, 0); console.log('总耗时(分钟):', totalMinutes); // 输出:28592
如果想沿用你之前的毫秒转换思路,只需要修改系数即可,逻辑完全一致:
const MS_PER_MINUTE = 60 * 1000; const MS_PER_HOUR = 60 * MS_PER_MINUTE; const MS_PER_DAY = 24 * MS_PER_HOUR; const totalMs = calculateTime.reduce((total, item) => { const itemTotalMs = item.days * MS_PER_DAY + item.hours * MS_PER_HOUR + item.minutes * MS_PER_MINUTE; return total + itemTotalMs; }, 0);
步骤2:计算一年的总时间(默认取平年365天)
如果用分钟计算,一年的总分钟数是:
const MINUTES_PER_YEAR = 365 * MINUTES_PER_DAY; // 365×1440 = 525600 分钟
步骤3:计算年度百分比
用总耗时除以一年总时间,再乘以100得到百分比,还可以用toFixed()控制小数位数,让结果更美观:
const annualPercentage = (totalMinutes / MINUTES_PER_YEAR) * 100; console.log(`年度占比:${annualPercentage.toFixed(2)}%`); // 输出:5.44%
完整代码整合
把所有步骤串起来,就是可以直接运行的完整代码了:
const calculateTime = [ { title: 'a', days: 9, hours: 22, minutes: 32, }, { title: 'b', days: 3, hours: 14, minutes: 0, }, { title: 'c', days: 6, hours: 8, minutes: 0, } ]; // 定义转换系数 const MINUTES_PER_HOUR = 60; const MINUTES_PER_DAY = 24 * MINUTES_PER_HOUR; const MINUTES_PER_YEAR = 365 * MINUTES_PER_DAY; // 计算总耗时 const totalMinutes = calculateTime.reduce((sum, item) => { return sum + item.days * MINUTES_PER_DAY + item.hours * MINUTES_PER_HOUR + item.minutes; }, 0); // 计算年度百分比 const annualPercentage = (totalMinutes / MINUTES_PER_YEAR) * 100; console.log(`总耗时:${totalMinutes} 分钟`); console.log(`占一年时间的百分比:${annualPercentage.toFixed(2)}%`);
小提示
- 如果需要严格考虑闰年,可以给年份加个判断逻辑,但日常统计用365天就足够啦
reduce是JS里处理数组求和、累加类需求的常用API,多练几次就能熟练掌握啦~
内容的提问来源于stack exchange,提问作者ricardo aguiar
相关产品推荐
相关产品推荐

