如何在jQuery中计算12小时制时间差?代码优化求助
搞定12小时制时间差计算的代码修改方案
嘿,你的问题核心在于原代码完全没处理12小时制里的AM/PM标识,直接硬拆小时数相减,自然算不对12:00 AM到1:45 PM的差值。我给你调整一下代码,完美实现你要的效果:
修改后的完整代码
$('button').on('click', function() { // 把12小时制时间转成总分钟数的辅助函数 function timeToMinutes(timeStr) { const [timeSection, period] = timeStr.split(' '); let [hours, minutes] = timeSection.split(':').map(Number); // 处理AM/PM的特殊转换规则 if (period === 'AM') { hours = hours === 12 ? 0 : hours; } else { hours = hours === 12 ? 12 : hours + 12; } return hours * 60 + minutes; } const startTime = $('#timeOfCall').val(); const endTime = $('#timeOfResponse').val(); // 转成分钟数计算差值,避免小时分钟单独计算的bug const startMinutes = timeToMinutes(startTime); const endMinutes = timeToMinutes(endTime); let diffMinutes = endMinutes - startMinutes; // 处理跨天情况(如果结束时间早于开始时间,自动加一天的分钟数) if (diffMinutes < 0) { diffMinutes += 24 * 60; } // 把总分钟差转成小时和分钟,格式化两位数字 const hours = Math.floor(diffMinutes / 60); const minutes = diffMinutes % 60; // 按你的需求,把小时转成12小时制显示(13小时→1小时) const displayHours = hours % 12 === 0 ? 12 : hours % 12; // 拼接成两位数字的格式 const result = `${String(displayHours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}`; // 假设第三个输入框的id是timeDifference,把结果赋值进去 $('#timeDifference').val(result); });
关键改动说明
- 新增转换函数:
timeToMinutes专门处理12小时制到分钟数的转换,完美解决12:00 AM(实际是0点)、1:45 PM(实际是13点)这类特殊时间的转换问题。 - 用分钟数计算差值:避免了直接减小时出现负数的尴尬,还能轻松处理跨天的情况(比如结束时间是第二天的凌晨)。
- 格式化输出:用
padStart确保小时和分钟都是两位数字,比如1小时变成01,完全符合你要的01:45格式。 - 12小时制差值处理:通过
hours % 12把24小时制的差值转成12小时制显示,这就是为什么13小时45分会变成01:45的原因。如果你之后需要显示实际的24小时制差值,直接去掉取模逻辑,用原始的hours即可。
内容的提问来源于stack exchange,提问作者Shalu Tripathi
相关产品推荐
相关产品推荐

