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

使用<input type="time">获取小时值返回NaN的解决方法

解决<input type="time">提取24小时制小时的NaN问题

问题根源

你当前代码返回NaN的核心问题是new Date('time')这一行——你传入的是固定字符串'time',而非输入框的实际时间值,Date无法解析这个无效内容,因此返回NaN。另外要注意:<input type="time">的value本身就是24小时制的HH:mm格式字符串,浏览器会自动把用户输入的12小时制时间(比如03:11 pm)转换为24小时制的15:11,无需手动处理AM/PM转换。

两种可行解决方案

方法1:直接分割字符串提取小时(最简单高效)

利用<input type="time">固定的HH:mm格式,直接按冒号分割字符串取小时部分:

function showTime(){
  let timeInput = document.getElementById('myTime');
  let output = document.getElementById('output');
  
  // 先判断用户是否选择了时间
  if (!timeInput.value) {
    output.innerText = '请选择时间!';
    return;
  }
  
  // 分割HH:mm字符串,提取小时并转为数字
  let hours = parseInt(timeInput.value.split(':')[0], 10);
  
  console.log(hours);
  // 时间段判断
  if (hours < 12) {
    output.innerText = 'Morning';
  } else if (hours < 18) {
    output.innerText = 'Afternoon';
  } else if (hours < 24) {
    output.innerText = 'Evening';
  } else {
    output.innerText = 'Error getting hour!';
  }
}

方法2:通过Date对象获取小时(需补全日期)

如果想用Date对象处理,需要给输入的时间补一个有效日期前缀,让Date能正确解析:

function showTime(){
  let timeInput = document.getElementById('myTime');
  let output = document.getElementById('output');
  
  if (!timeInput.value) {
    output.innerText = '请选择时间!';
    return;
  }
  
  // 补全日期构造合法的日期时间字符串
  let fullTimeStr = `2000-01-01T${timeInput.value}`;
  let date = new Date(fullTimeStr);
  let hours = date.getHours();
  
  console.log(hours);
  // 三元表达式写法保持原逻辑
  hours < 12 ? output.innerText = 'Morning'
  : hours < 18 ? output.innerText = 'Afternoon'
  : hours < 24 ? output.innerText = 'Evening'
  : output.innerText = 'Error getting hour!';
}

补充说明

  • 两种方法都增加了输入为空的判断,避免用户未选择时间时触发错误逻辑;
  • HTML和CSS部分无需修改,直接替换JavaScript代码即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:24:57