gpt4 book ai didi

javascript - 如何使用 javascript 检查范围之间的时间

转载 作者:行者123 更新时间:2023-11-28 13:07:53 24 4
gpt4 key购买 nike

我有 HH:MM 格式的时间值。时间采用 24 小时格式。例如14:30

我想使用两个 IF 条件进行检查

  1. 如果时间值在 05:00 到 22:00 之间
  2. 如果时间值在 22:00 到 05:00 之间

我不知道该怎么做。

最佳答案

由于HH:mm格式的时间可以直接比较,所以只需比较数值即可。如果时间在范围内,则以下返回 true,否则返回 false。

var range = ['05:00','22:00'];

function isInRange(value, range) {
return value >= range[0] && value <= range[1];
}

['04:59','08:30','23:15'].forEach(function(time) {
console.log(time + ' is ' + (isInRange(time, range)? ' ':'not ') + 'in range');
});

// Alternatively
['04:59','23:15','08:30'].forEach(function(time) {
var inRange = isInRange(time, range);
console.log(time + ' is in range ' + (inRange? range : range.slice().reverse()).join(' - '));
});

为了提供更健壮的代码,应验证输入并考虑午夜以上的情况。

验证应将小时限制在 00-23 范围内,将分钟限制在 00 到 59 范围内,例如

/^(([0-1][0-9])|(2[0-3])):[0-5][0-9]$/.test(time)

如果开始时间小于结束时间,则假设范围不会超过午夜,例如05:00 至 22:00。如果开始时间大于结束时间,则范围确实会超过午夜,因此:

function isInRange(value, range) {
let re = /^(([0-1][0-9])|(2[0-3])):[0-5][0-9]$/;
let [start, end] = range;
// Validate values
if ([value, start, end].some(value => !re.test(value))) {
return;
}

// If start less than end, assume doesn't go over midnight
if (start <= end) {
return value >= start && value < end;

// Otherwise, assume goes over midnight
} else {
return value >= start || value < end;
}
}


// Range on same day midnight
let range = ['05:00', '22:00'];
['08:30','23:00','25:15'].forEach(value => {
let inRange = isInRange(value, range);
// Check returned value isn't undefined
if (inRange === void 0) {
console.log(`Invalid input: ${value}, [${range}]`);
} else {
console.log(`${value}: is ${inRange? '':'not'} in [${range}]`);
}
});

// Range over midnight
range = ['22:00', '05:00'];
['08:30','23:00'].forEach(value => console.log(
`${value}: is ${isInRange(value, range)? '':'not'} in [${range}]`
));

如果比较字符串不合适,则可以将时间减少到通用单位,例如分钟,然后进行比较,例如

// Convert time in H:mm format to minutes
function timeToMins(time) {
let re = /^(([0-1]?[0-9])|(2[0-3])):[0-5][0-9]$/;
if (!re.test(time)) return;
let [H, m] = time.split(':');
return H * 60 + m * 1;
}

function isInRange(time, range) {
// Input validation
let re = /^(([0-1]?[0-9])|(2[0-3])):[0-5][0-9]$/;
if ([time, ...range].some(time => !re.test(time))) {
return;
}
// Convert times to minutes
let [start, end] = range.map(time => timeToMins(time));
time = timeToMins(time);

// If start less than end, assume doesn't go over midnight
if (start <= end) {
return time >= start && time < end;

// Otherwise, assume goes over midnight
} else {
return time >= start || time < end;
}
}

// Range on same day midnight
let range = ['05:00', '22:00'];
['08:30', '23:00', '25:15'].forEach(value => {
let inRange = isInRange(value, range);
// Check returned value isn't undefined
if (inRange === void 0) {
console.log(`Invalid input: ${value}, [${range}]`);
} else {
console.log(`${value}: is ${inRange? '':'not'} in [${range}]`);
}
});

// Range over midnight
range = ['22:00', '05:00'];
['08:30', '23:00'].forEach(value => console.log(
`${value}: is ${isInRange(value, range)? '':'not'} in [${range}]`
));

关于javascript - 如何使用 javascript 检查范围之间的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45204993/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com