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

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


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


有人可以帮忙吗?


更新的代码:我有 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


30秒到达战场
浏览 150回答 4
4回答

江户川乱折腾

只需比较字符串即可var shiftStartTime = "05:48"; var shiftEndTime = "14:29";shiftStartTime > shiftEndTime // false

守着星空守着你

好的,所以您得到了格式为字符串的三个相对时间HH:mm。我假设您的时间以 24 小时字符串/军事时间形式给出,因为否则,您需要 AM / PM 说明符。将您正在使用的数据采用适合机器可读的格式总是很有用的,因此您可以将它们解析为将小时和分钟作为数字保存的简单对象。执行此操作的函数可能如下所示。function parseTimeStr(time) {&nbsp; &nbsp; // The pattern of your input,&nbsp; &nbsp; // allows spaces around the `:`&nbsp; &nbsp; // and single-digit inputs like `8:00`&nbsp; &nbsp; let re = /([0-9][0-9]?)\s*:\s*([0-9][0-9]?)/;&nbsp; &nbsp; let result = re.exec(time.trim());&nbsp; &nbsp; if (result === null) {&nbsp; &nbsp; &nbsp; &nbsp; throw "No match"&nbsp; &nbsp; }&nbsp; &nbsp; let hour = parseInt(result[1], 10);&nbsp; &nbsp; let minute = parseInt(result[2], 10);&nbsp; &nbsp; /* handle out of range values here */&nbsp; &nbsp; return { hour, minute };}好的,现在你已经有了这些对象了。你如何比较它们?有一个模式:让一个函数返回第一个参数是否大于 (1)、等于 (0) 还是小于 (-1) 第二个参数。既然时间是一个对象,那么写这个就很简单了:function cmpDate(date1, date2) {&nbsp; &nbsp; if (date1.hour > date2.hour) {&nbsp; &nbsp; &nbsp; &nbsp; return 1;&nbsp; &nbsp; } else if (date1.hour < date2.hour) {&nbsp; &nbsp; &nbsp; &nbsp; return -1;&nbsp; &nbsp; } else if (date1.minute > date2.minute) {&nbsp; &nbsp; &nbsp; &nbsp; return 1;&nbsp; &nbsp; } else if (date1.minute < date2.minute) {&nbsp; &nbsp; &nbsp; &nbsp; return -1;&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; return 0;&nbsp; &nbsp; }}好吧,现在我们可以有一个辅助函数来检查第一个参数是否位于最后两个参数定义的闭区间内:function isInShift(time, shiftStart, shiftEnd) {&nbsp; &nbsp; // time is greater or equal shiftStart&nbsp; &nbsp; // and less or equal shiftEnd&nbsp; &nbsp; return cmpDate(time, shiftStart) !== -1 && cmpDate(time, shiftEnd) !== 1;}然后您最终可以通过调用进行比较isInShift(parseTimeStr(selectedTime), parseTimeStr(shiftStartTime), parseTimeStr(shiftEndTime))。这将返回一个布尔值。您可以轻松扩展此基础架构以实现多个轮班。请注意,现实和您的用户都可能比您想象的更……扭曲。上面的代码没有对无效时间输入进行错误处理,也没有考虑夜班,但这些都是你可以轻松计算出来的细节,你只需要花点功夫去思考它们。

精慕HU

const date&nbsp; = new Date();const shiftStartTime = '05:48';const shiftEndTime = '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);if (start < selected && selected < end) {&nbsp; console.log(true);} else {&nbsp; console.log(false);}

元芳怎么了

这里有一些 JS 可以做到这一点,尽管更好的格式时间会让它变得更容易function findTotalTime(time) {&nbsp; hours = parseInt(time.substring(0,2))&nbsp; mins = parseInt(time.substring(3,5))&nbsp; return (hours*60) + mins}startTime = findTotalTime(shiftStartTime)endTime = findTotalTime(shiftEndTime)selectedTime = findTotalTime(selectedDate)if (selectedTime > startTime && selectedTime < endTime) {&nbsp; // time is inbetween shifts}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript