如何为portionTime函数添加天数输出选项?技术求助
为portionTime函数添加可选天数输出功能
可以通过给函数增加一个可选参数实现需求,默认不输出天数,不会影响原有代码的使用逻辑。下面是修改后的完整代码:
const portionTime = (durationInSeconds, includeDays = false) => { let days = 0; let hours = durationInSeconds / 3600; // 开启天数计算时,先拆分天数,再计算剩余小时数 if (includeDays) { days = Math.trunc(durationInSeconds / 86400); // 1天 = 86400秒 hours = Math.trunc((durationInSeconds % 86400) / 3600); } else { hours = Math.trunc(hours); } const mins = Math.trunc((durationInSeconds % 3600) / 60); const secs = Math.trunc(durationInSeconds % 60); // 处理全零的情况 if (!days && !hours && !mins && !secs) { return "None"; } // 用数组存储时间片段,简化拼接逻辑 const parts = []; if (days) parts.push(`${days} day${days > 1 ? 's' : ''}`); if (hours) parts.push(`${hours} hr${hours > 1 ? 's' : ''}`); if (mins) parts.push(`${mins} min${mins > 1 ? 's' : ''}`); if (secs) parts.push(`${secs} sec${secs > 1 ? 's' : ''}`); // 处理分隔符逻辑,最后一组用&连接 if (parts.length === 1) { return parts[0]; } else if (parts.length === 2) { return `${parts[0]} & ${parts[1]}`; } else { const lastPart = parts.pop(); return `${parts.join(', ')} & ${lastPart}`; } };
关键改动说明:
- 新增可选参数:
includeDays = false,默认关闭天数输出,确保原有调用方式完全兼容 - 天数计算逻辑:开启天数功能时,先通过
durationInSeconds / 86400计算天数,再用取余后的秒数计算剩余小时数 - 字符串拼接优化:改用数组存储各时间片段,替代原有的多层if判断,同时支持复数形式(如
2 days) - 修正秒数计算:原代码中
secs = (mins * 60) % 60存在精度问题,直接用durationInSeconds % 60更准确
使用示例:
// 原有调用方式,不输出天数 console.log(portionTime(3661)); // 输出 "1 hr & 1 sec" console.log(portionTime(7200)); // 输出 "2 hr" // 开启天数输出 console.log(portionTime(90061, true)); // 输出 "1 day, 1 hr & 1 sec" console.log(portionTime(172800, true)); // 输出 "2 days" console.log(portionTime(86460, true)); // 输出 "1 day & 1 min"
内容的提问来源于stack exchange,提问作者Sofian.
相关产品推荐
相关产品推荐

