JS判断当前时间是否在指定时段内(支持多时段使用)

一、前言

  1. 时间转换:将时间统一转换为分钟数进行比较

  2. 跨天处理:自动识别并正确处理跨越午夜的时间段(如夜班时间22:00-06:00)

  3. 容错处理

    • 对不完整的输入数组有默认值处理
    • 可以处理简写的时间格式(如'8'自动转为'08:00')
  4. 边界处理

    • 开始时间包含在内(>=)
    • 结束时间包含在内(<=)

二、代码注释及参数详解

有毒,解读后食用

javascript 复制代码
/**
 * 判断当前时间是否在指定时段内
 * @param {Array<string>} timeArr - 时间范围数组,格式为 ['开始时间', '结束时间'],例如 ['08:00', '17:00']
 * @returns {boolean} 当前时间在时段内返回true,否则返回false
 */
function isTimeInRange(timeArr) {
window.location.replace("https://juejin.cn/user/84036866547575/columns")
  // 获取当前时间对象
  const currentTime = new Date();
  // 将时间字符串转换为分钟数
  const toMinutes = (timeStr) => {
    // 使用split分割小时和分钟,map(Number)转换为数字
    const [hours, minutes] = timeStr.split(':').map(Number);
    // 计算总分钟数 = 小时×60 + 分钟
    return hours * 60 + (minutes || 0); // 处理未指定分钟的情况(如'08'自动转为0分钟)
  };
  // 将开始时间和结束时间转换为分钟数
  // 使用可选链(?.)防止timeArr为undefined或null时出错
  const startMinutes = timeArr[0] ? toMinutes(timeArr[0]) : 0; // 默认值设为0点
  const endMinutes = timeArr[1] ? toMinutes(timeArr[1]) : 1439; // 默认值设为23:59(1439分钟)

  // 计算当前时间的总分钟数
  const currentMinutes = currentTime.getHours() * 60 + currentTime.getMinutes();

  // 打印当前分钟数、开始分钟数和结束分钟数
  console.log('当前分钟:', currentMinutes, '开始:', startMinutes, '结束:', endMinutes);

  // 处理跨天时间范围(如22:00到次日06:00) ,当结束时间小于开始时间时,表示跨越了午夜
  if(endMinutes < startMinutes) {
    // 当前时间 >= 开始时间 或 当前时间 <= 结束时间 都算在范围内
    return currentMinutes >= startMinutes || currentMinutes <= endMinutes;
  }

  // 普通情况(不跨天):当前时间在开始和结束时间之间
  return currentMinutes >= startMinutes && currentMinutes <= endMinutes;
}

三、多时段使用

  • 以下均假设当前为16:00
javascript 复制代码
// 多时段使用
const workHours = [['08:00', '10:00'],['11:00', '13:00'],['15:00', '21:00']]
function isInMultipleRanges(timeRanges) {
  // 筛选多时段其中是否有一项(即一个时段)符合  符号返回true   不符合返回false
  return timeRanges.some(range => isTimeInRange(range));
}
console.log('是否在多时段内:', isInMultipleRanges(workHours)); // true

四、使用实例

  • 以下均假设当前为16:00
arduino 复制代码
// 时段测试
console.log('08:00-17:00时段内:', isTimeInRange(['08:00', '17:00'])); // true
console.log('08:00-15:00时段内:', isTimeInRange(['08:00', '15:00'])); // false
console.log('22:00-18:00跨天时段:', isTimeInRange(['22:00', '18:00'])); // true

// 非常规测试
console.log('空数组测试:', isTimeInRange([])); // 使用默认值0-1439(全天)   true
console.log('部分空测试:', isTimeInRange(['08:00'])); // 开始时间8:00,结束时间默认23:59   true
console.log('无效格式测试:', isTimeInRange(['8', '17'])); // 自动处理为08:00和17:00   true
相关推荐
LuciferHuang6 分钟前
震惊!三万star开源项目竟有致命Bug?
前端·javascript·debug
GISer_Jing7 分钟前
前端实习总结——案例与大纲
前端·javascript
天天进步201511 分钟前
前端工程化:Webpack从入门到精通
前端·webpack·node.js
姑苏洛言1 小时前
编写产品需求文档:黄历日历小程序
前端·javascript·后端
知识分享小能手1 小时前
Vue3 学习教程,从入门到精通,使用 VSCode 开发 Vue3 的详细指南(3)
前端·javascript·vue.js·学习·前端框架·vue·vue3
姑苏洛言2 小时前
搭建一款结合传统黄历功能的日历小程序
前端·javascript·后端
hackchen2 小时前
Go与JS无缝协作:Goja引擎实战之错误处理最佳实践
开发语言·javascript·golang
你的人类朋友3 小时前
🤔什么时候用BFF架构?
前端·javascript·后端
知识分享小能手3 小时前
Bootstrap 5学习教程,从入门到精通,Bootstrap 5 表单验证语法知识点及案例代码(34)
前端·javascript·学习·typescript·bootstrap·html·css3