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
相关推荐
崔庆才丨静觅3 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60613 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了4 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅4 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅4 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅4 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment4 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅5 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊5 小时前
jwt介绍
前端
爱敲代码的小鱼5 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax