为何我的if语句不受输入影响?AM/PM转24小时制代码异常
AM/PM转24小时制代码异常排查
核心问题原因
你的代码里第二个if语句末尾多了一个分号,这直接导致条件判断完全失效:
if (temp[0] >= 01 && temp[0] <= 12); { // 此处的分号是错误根源 temp[0] = Number(temp[0]) + 12; return temp.join(':') }
JavaScript会把这个分号解析为if条件的结束标记,后面的大括号变成了独立的代码块——不管temp[0] >=01 && temp[0] <=12是否为真,都会执行里面的逻辑。这就是输入"25:05:45PM"时,明明条件不满足却仍执行加12操作的原因。
额外优化点
- 类型转换问题:
temp[0]是字符串类型,直接和数字比较会触发隐式转换,建议先转为数字再判断,避免意外行为。 - 边界场景处理:12PM应保持12而非转为24,12AM需要转为00,当前代码未覆盖这些情况。
- 无效输入处理:像"25:05:45PM"这类超出合法小时范围的输入,可增加错误提示或跳过转换逻辑。
修正后的示例代码
function conversionTime(s) { if (s.includes('PM')) { let temp = s.slice(0, 8).split(':'); let hour = Number(temp[0]); if (hour >= 1 && hour < 12) { temp[0] = hour + 12; } else if (hour === 12) { temp[0] = 12; // 12PM保持为12 } // 可在此添加无效小时的处理逻辑 return temp.join(':'); } else if (s.includes('AM')) { let temp2 = s.slice(0, 8).split(':'); let hour = Number(temp2[0]); if (hour === 12) { temp2[0] = '00'; // 12AM转为00 } return temp2.join(':'); } return '无效时间格式'; } console.log(conversionTime("25:05:45PM")); // 输出"25:05:45"(可按需调整无效输入处理)
内容的提问来源于stack exchange,提问作者AesirDev
相关产品推荐
相关产品推荐

