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
相关推荐
晓晓莺歌18 分钟前
图片的require问题
前端
码农黛兮_461 小时前
CSS3 基础知识、原理及与CSS的区别
前端·css·css3
水银嘻嘻1 小时前
web 自动化之 Unittest 四大组件
运维·前端·自动化
(((φ(◎ロ◎;)φ)))牵丝戏安1 小时前
根据输入的数据渲染柱形图
前端·css·css3·js
wuyijysx1 小时前
JavaScript grammar
前端·javascript
溪饱鱼2 小时前
第6章: SEO与交互指标
服务器·前端·microsoft
咔_2 小时前
LinkedList详解(源码分析)
前端
逍遥德2 小时前
CSS可以继承的样式汇总
前端·css·ui
读心悦3 小时前
CSS3 选择器完全指南:从基础到高级的元素定位技术
前端·css·css3
学渣y3 小时前
React状态管理-对state进行保留和重置
javascript·react.js·ecmascript