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
相关推荐
leluckys4 分钟前
flutter 专题 六十三 Flutter入门与实战作者:xiangzhihong8Fluter 应用调试
前端·javascript·flutter
kidding72318 分钟前
微信小程序怎么分包步骤(包括怎么主包跳转到分包)
前端·微信小程序·前端开发·分包·wx.navigateto·subpackages
微学AI32 分钟前
详细介绍:MCP(大模型上下文协议)的架构与组件,以及MCP的开发实践
前端·人工智能·深度学习·架构·llm·mcp
liangshanbo12151 小时前
CSS 包含块
前端·css
Mitchell_C1 小时前
语义化 HTML (Semantic HTML)
前端·html
倒霉男孩1 小时前
CSS文本属性
前端·css
shoa_top1 小时前
JavaScript 数组方法总结
javascript
晚风3081 小时前
前端
前端
JiangJiang1 小时前
🚀 Vue 人如何玩转 React 自定义 Hook?从 Mixins 到 Hook 的华丽转身
前端·react.js·面试
鱼樱前端1 小时前
让人头痛的原型和原型链知识
前端·javascript