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

为何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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:33:47