You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:23:04