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

将日期处理中JavaScript三元运算转为条件语句遇语法错误求助

问题分析与修复方案

咱们先把你代码里的关键问题拆解清楚,一步步解决:

1. 语法错误的直接根源

你写的嵌套if-else结构出现了多余的else分支,看这段有问题的代码:

else { 
  if(hours < 10 && hours > 12) { 
    return ("0" + hours) 
  } else { 
    return (hours) 
  } else {  // 这里就是触发语法错误的地方!
    return (time.getHours()) 
  } 
}

JavaScript里一个if只能对应一个else,你在第二个else后面又加了一个else,引擎根本不知道该怎么解析,所以直接抛出了unexpected token else错误。

另外还有个低级疏漏:你定义的变量是timeNow = new Date(),但后面调用的却是time.getHours(),变量名不匹配,这会直接导致time未定义的错误。

2. 逻辑上的无效分支

你写的hours < 10 && hours > 12这个条件完全不可能成立——一个数字不可能同时小于10又大于12,这个分支永远不会被执行,属于无效逻辑。

3. 修复后的完整实现

结合你的需求(12小时制转换 + 1-9小时自动补0),我重新整理了代码,同时优化了变量作用域(把时间处理放在函数内部,每次调用都能获取最新时间):

三元运算符版本(保留你最初的写法风格)

function getFormattedHours() {
  const timeNow = new Date();
  let hours = timeNow.getHours();
  
  // 转换为12小时制,处理凌晨0点的特殊情况(12小时制显示12)
  hours = hours > 12 ? hours - 12 : hours === 0 ? 12 : hours;
  // 小于10的小时补0
  return hours < 10 ? `0${hours}` : `${hours}`;
}

// 测试示例
console.log(getFormattedHours()); // 上午9点输出"09",下午3点输出"03",凌晨0点输出"12"

if-else替代版本(完全替换三元运算)

function getFormattedHours() {
  const timeNow = new Date();
  let hours = timeNow.getHours();
  
  // 12小时制转换
  if (hours > 12) {
    hours = hours - 12;
  } else if (hours === 0) {
    // 凌晨0点在12小时制里显示12
    hours = 12;
  }
  
  // 补0处理
  if (hours < 10) {
    return `0${hours}`;
  } else {
    return `${hours}`;
  }
}

额外补充

我特意加了hours === 0的处理,因为凌晨0点用12小时制表示应该是12点,而不是00,这更符合日常时间显示的习惯;同时把时间获取放在函数内部,确保每次调用函数都能拿到当前最新的小时数,而不是一开始定义的固定值。

内容的提问来源于stack exchange,提问作者Ricky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:42:18