为何JavaScript三元表达式在hours为0时返回12?hours判断为何非恒真?
关于JavaScript时间格式化中
hours ? hours : 12的逻辑解析 你疑惑的核心是对三元运算符的误解:hours ? hours : 12不是赋值操作hours = hours,而是三元条件运算符,它的逻辑规则是:
- 问号前的
hours是判断条件,若这个值为「真(truthy)」,就将问号后的第一个值(hours)赋值给变量;若为「假(falsy)」,就将冒号后的第二个值(12)赋值给变量。
在JavaScript里,0属于**假值(falsy)**范畴,当hours等于0时,条件判断不成立,自然会执行冒号后的逻辑,把hours设为12。
结合你的代码流程具体看:
- 当原时间是12点时,
hours = date.getHours()拿到的是12 - 执行
hours = hours % 12后,12模12的结果是0 - 这时候运行
hours = hours ? hours : 12,因为hours是0(假值),所以会把hours替换成12,正好符合12小时制里12点的显示规则。
你的完整代码:
function timeFormat(date) { date.replaceAll("-","/"); date = new Date(date + " edt"); var hours = date.getHours(); var minutes = date.getMinutes(); var ampm = hours >= 12 ? 'pm' : 'am'; hours = hours % 12; console.log(hours) hours = hours ? hours : 12; // the hour '0' should be '12' minutes = minutes < 10 ? '0'+ minutes : minutes; var strTime = hours + ':' + minutes + ' ' + ampm; return strTime; } console.log(timeFormat("2022-05-6 12:00:00"))
内容的提问来源于stack exchange,提问作者DCR
相关产品推荐
相关产品推荐

