一、前言
-
时间转换:将时间统一转换为分钟数进行比较
-
跨天处理:自动识别并正确处理跨越午夜的时间段(如夜班时间22:00-06:00)
-
容错处理:
- 对不完整的输入数组有默认值处理
- 可以处理简写的时间格式(如'8'自动转为'08:00')
-
边界处理:
- 开始时间包含在内(>=)
- 结束时间包含在内(<=)
二、代码注释及参数详解
有毒,解读后食用
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