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
相关推荐
w2sfot4 分钟前
【JS加密在线】jsjiami.online(让JavaScript 更安全!)
开发语言·javascript·安全
HSunR5 分钟前
ruoyi 若依 自定义注解 参数校验
java·前端·数据库
拆房老料1 小时前
ONLYOFFICE也能像Microsoft Word和WPS一样分别设置中西文字体
前端·html·word·开源软件·wps
Solis程序员1 小时前
Stripe 幂等表:把「不确定的重试」变成「查表返回」
前端·安全·bootstrap·php·agent
李纲明2 小时前
WordPress 站点变慢:按 TTFB → 缓存 → 查询 → 前端 分层排查(含配置注意)
前端·缓存·性能优化·wordpress·后端开发
程序人生8882 小时前
PDF 转 Word 版式错乱、表格丢失?DocConverter Web 格式互转引擎的保真实践
前端·人工智能·opencv·机器学习·pdf·word
粥里有勺糖3 小时前
安利一下最近用的桌面“Agent” | T3 Code
前端·github·ai编程
xy34533 小时前
Axure 9.0 动态面板基本操作
前端·ui·html·axure·原型·产品设计
不停喝水3 小时前
【前端转全栈java速通课】 项目实战④7-11节 操作数据库-登录-注册-修改密码-注销-mubatis-plus简化crud-
java·前端·数据库
一水鉴天4 小时前
统一对象拓扑(UOT)设计全链定稿:从三件事分离到三继承 之1 20261010(豆包“查看聊天内容”继续)
前端·css