将日期处理中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
相关产品推荐
相关产品推荐

