考虑到分钟,如何检查当前时间是否在特定范围内

我正在做餐馆送货上门的网站,取决于餐厅的送货时间我需要启用/禁用立即订购按钮

我有12小时格式的startTime和End Time。

这是代码

var startTime = '8:30 AM' ; var endTime = '6:30 PM' ; var formatTime = (function () { function addZero(num) { return (num >= 0 && num 11?"pm" :"am"].join(" "); } return formatted; } })(); var currentTime = formatTime(new Date()); 

我需要检查当前时间是否在startTime和EndTime之间

如果它只有几小时,我可以从startTime,endTime和currentTime中提取冒号之前的第一个字符并完成这样的比较

  if(currentTime >= startTime && currentTime <= endTime) { alert('Restaurant Open'); } else { alert('Restaurant Closed'); } 

但是我也需要考虑分钟,所以如果考虑分钟,你能不能让我如何做这个比较?

考虑到分钟,如何检查当前时间是否在特定范围内

这样的事情应该有效

 var startTime = '6:30 PM'; var endTime = '8:30 AM'; var now = new Date(); var startDate = dateObj(startTime); // get date objects var endDate = dateObj(endTime); if (startDate > endDate) { // check if start comes before end var temp = startDate; // if so, assume it's across midnight startDate = endDate; // and swap the dates endDate = temp; } var open = now < endDate && now > startDate ? 'open' : 'closed'; // compare console.log('Restaurant is ' + open); function dateObj(d) { // date parser ... var parts = d.split(/:|\s/), date = new Date(); if (parts.pop().toLowerCase() == 'pm') parts[0] = (+parts[0]) + 12; date.setHours(+parts.shift()); date.setMinutes(+parts.shift()); return date; } 
 .as-console-wrapper {top : 0!important} 

似乎没有与午夜时间一起工作,尝试将时间从下午6:30改为凌晨2:30。 一个好的解决方案是将momentjs与moment-range插件一起使用

 function inTimeRange(time, startTime, endTime) { //Setup today vars var today = new moment(new Date()); var ayear = today.year(); var amonth = today.month() + 1; // 0 to 11 var adate = today.date(); amonth = String(amonth).length < 2 ? "0" + amonth : amonth; adate = String(adate).length < 2 ? "0" + adate : adate; //Create moment objects var moment1, moment2; var temp = endTime.split(" "); if(temp[1].toLowerCase() == "am") { var test1 = ayear + "-" + amonth + "-" + adate + " " + startTime; var test2 = ayear + "-" + amonth + "-" + adate + " " + endTime; //Make sure that both times aren't morning times if(moment(test2).isAfter(test1)) { var moment1String = ayear + "-" + amonth + "-" + adate + " " + startTime; var moment2String = ayear + "-" + amonth + "-" + adate + " " + endTime; } else { var moment1String = ayear + "-" + amonth + "-" + adate + " " + startTime; var moment2String = ayear + "-" + amonth + "-" + (adate + 1) + " " + endTime; } moment1 = moment(moment1String, "YYYY-MM-DD HH:mm A"); moment2 = moment(moment2String, "YYYY-MM-DD HH:mm A"); } else { var moment1String = ayear + "-" + amonth + "-" + adate + " " + startTime; var moment2String = ayear + "-" + amonth + "-" + adate + " " + endTime; moment1 = moment(moment1String, "YYYY-MM-DD HH:mm A"); moment2 = moment(moment2String, "YYYY-MM-DD HH:mm A"); } //Run check var start = moment1.toDate(); var end = moment2.toDate(); var when; if(String(time).toLowerCase() == "now") { when = moment(new Date()); } else { var timeMoment1String = ayear + "-" + amonth + "-" + adate + " " + time; when = moment(timeMoment1String); } var range = moment().range(start, end); return when.within(range); } 
 var startTime = '02:30 AM'; var endTime = '13:00 PM'; var now = new Date(); var startDate = dateObj(startTime); var endDate = dateObj(endTime); alert(endDate) var open = now < endDate && now > startDate ? 'open' : 'closed'; alert('Restaurant is ' + open); function dateObj(d) { var parts = d.split(/:|\s/), date = new Date(); if (parts.pop().toLowerCase() == 'pm') parts[0] = (+parts[0]) + 12; date.setHours(+parts.shift()); date.setMinutes(+parts.shift()); return date; } 

我做了类似的事情。 我的应用程序在军事时间接收时间。 因此,如果时间没有进入第二天(即09:00的开始时间和17:00的结束时间,您只需检查您是否在这些时间之间。

如果结束时间是在午夜之后(即15:00的开始时间和01:00的结束时间),那么有三种情况:

  1. 您在开始和结束时间之后的某个时间,例如16:00,在这种情况下,您在营业时间内
  2. 您在开始和结束时间之前的某个时间,如00:30,在这种情况下,您也在工作时间内。
  3. 您在结束时间之后,但在开始时间之前,如02:30,在这种情况下,您不在工作时间

这是我的代码示例:

 const isCurrentDayPart = (dayPart) => { let currentTime = moment(); let startTime = moment(dayPart.startTime, "HH:mm"); let endTime = moment(dayPart.endTime, "HH:mm"); if (dayPart.startTime < dayPart.endTime) { return currentTime.isBetween(startTime, endTime); } else { if (currentTime.isAfter(endTime) && currentTime.isAfter(startTime)) { return true; } else if (currentTime.isBefore(endTime) && currentTime.isBefore(startTime)) { return true; } } return false; };