Javascript 检查给定的时间(仅小时:分钟)是否介于其他两个不同的时间之间?

Javascript 检查给定的时间(仅小时:分钟)是否介于其他两个不同的时间之间?,javascript,time,Javascript,Time,我有两个不同的时间: var shiftStartTime=“05:48”; var shiftEndTime=“14:29” 我还有另一个时间selectedDate=“06:20”(这将根据datetimepicker的选择而改变),我想检查selectedDate是否应该介于(shiftStartTime和shiftEndTime)之间 有人能帮忙吗 更新代码: 我有6个不同的时间跨度,如下所示 var shift1StartTime = "05:48"; var sh

我有两个不同的时间: var shiftStartTime=“05:48”; var shiftEndTime=“14:29”

我还有另一个时间selectedDate=“06:20”(这将根据datetimepicker的选择而改变),我想检查selectedDate是否应该介于(shiftStartTimeshiftEndTime)之间

有人能帮忙吗

更新代码: 我有6个不同的时间跨度,如下所示

var shift1StartTime = "05:48";
var shift1EndTime = "14:18";
var shift2StartTime = "14:30";
var shift2EndTime = "22:29";
va

r shift3StartTime = "22:30";
    var shift3EndTime = "05:47";
使用所有6个时间跨度,我想检查给定的时间是否介于(shift1StartTime和shift1EndTime)和返回shift1之间

如果给定的时间介于(shift2StartTime和shift2EndTime)之间,则返回shift2


如果给定的时间介于(shift3StartTime和shift3EndTime)之间,则返回shift3

以下是一些执行此操作的JS,尽管更好的格式化时间会使其更容易

function findTotalTime(time) {
  hours = parseInt(time.substring(0,2))
  mins = parseInt(time.substring(3,5))
  return (hours*60) + mins
}

startTime = findTotalTime(shiftStartTime)
endTime = findTotalTime(shiftEndTime)
selectedTime = findTotalTime(selectedDate)
if (selectedTime > startTime && selectedTime < endTime) {
  // time is inbetween shifts
}
函数查找总时间(时间){
小时=parseInt(时间子串(0,2))
分钟=parseInt(时间子串(3,5))
返回时间(小时*60)+分钟
}
startTime=findTotalTime(shiftStartTime)
endTime=FindToTime(移位时间)
selectedTime=FindToTime(selectedDate)
如果(selectedTime>startTime&&selectedTime
const date=新日期();
常量shiftStartTime='05:48';
常数时间='14:29';
const selectedDate='14:20';
const start=date.setHours(+shiftStartTime.split(“:”)[0],+shiftStartTime.split(“:”)[1],0,0);
const end=date.setHours(+shiftEndTime.split(“:”)[0],+shiftEndTime.split(“:”)[1],0,0);
const selected=date.setHours(+selectedDate.split(':')[0],+selectedDate.split(':')[1],0,0);
如果(开始<已选择和已选择<结束){
console.log(true);
}否则{
console.log(false);
}

好的,那么您得到了格式为
HH:mm
的字符串的三个相对时间。我假设您的时间是24小时字符串/军事时间,因为否则,您需要一个上午/下午说明符

使用适合机器可读的格式处理数据总是很有用的,因此您可以将它们解析为一个简单的对象,以小时和分钟作为数字

执行此操作的函数可能如下所示

函数parseTimeStr(时间){
//你输入的模式,
//允许在“”周围使用空格:`
//以及诸如'8:00'之类的单个数字输入`
设re=/([0-9][0-9]?)\s*:\s*([0-9][0-9]?)/;
让result=re.exec(time.trim());
如果(结果===null){
抛出“不匹配”
}
设hour=parseInt(结果[1],10);
设minute=parseInt(结果[2],10);
/*此处处理超出范围的值*/
返回{小时,分钟};
}
好的,现在你有了这些物体。你如何比较它们?让函数返回第一个参数是大于(1)、等于(0)还是小于(-1)第二个参数

写这篇文章很简单,因为时间是一个对象:

函数cmpDate(日期1、日期2){
如果(date1.hour>date2.hour){
返回1;
}否则如果(date1.hourdate2.minute){
返回1;
}否则如果(date1.minute
好的,现在我们可以让一个helper函数检查第一个参数是否在最后两个参数定义的闭合区间内:

功能为移位(时间、移位开始、移位结束){
//时间大于或等于shiftStart
//和小于或等于
返回cmpDate(time,shiftStart)!=-1&&cmpDate(time,shiftEnd)!==1;
}
最后,您可以通过调用
isInShift(parseTimeStr(selectedTime)、parseTimeStr(shiftStartTime)、parseTimeStr(shiftEndTime))进行比较。
。这将返回一个布尔值。您可以轻松地将此基础结构扩展到多个班次

请注意,现实和您的用户都可以更。。。比你想象的还要疯狂。
上面的代码不会对无效的时间输入进行错误处理,也不会考虑夜班,但这些都是您可以轻松解决的细节,您只需花一些精力考虑它们。

只需比较如下字符串

var shiftStartTime = "05:48"; var shiftEndTime = "14:29";

shiftStartTime > shiftEndTime // false

所以你把这些时间作为字符串?如果你用这种格式写时间,在24小时内:“HH:mm”,简单的字符串比较就可以了
if(shiftStartTime
。如果您使用实际的javascript“Date”类型,也可以这样做。这是否回答了您的问题?我不想和date比较。没有日期是可能的吗?
var shiftStartTime = "05:48"; var shiftEndTime = "14:29";

shiftStartTime > shiftEndTime // false