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

为何我的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操作的原因。

额外优化点

  1. 类型转换问题:temp[0]是字符串类型,直接和数字比较会触发隐式转换,建议先转为数字再判断,避免意外行为。
  2. 边界场景处理:12PM应保持12而非转为24,12AM需要转为00,当前代码未覆盖这些情况。
  3. 无效输入处理:像"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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:55:24