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

Javascript 如何检查当前时间是否在特定范围内,同时考虑分钟数,javascript,jquery,Javascript,Jquery,我正在做一个餐厅送货上门的网站,根据餐厅送货上门的时间,我需要启用/禁用“立即订购”按钮 我有12小时格式的开始时间和结束时间 这是密码 var startTime = '8:30 AM' ; var endTime = '6:30 PM' ; var formatTime = (function () { function addZero(num) { return (num >= 0 && num < 10) ? "0" + num

我正在做一个餐厅送货上门的网站,根据餐厅送货上门的时间,我需要启用/禁用“立即订购”按钮

我有12小时格式的开始时间和结束时间

这是密码

var startTime = '8:30 AM' ;
var endTime  =  '6:30 PM' ;


var formatTime = (function () {
    function addZero(num) {
        return (num >= 0 && num < 10) ? "0" + num : num + "";
    }
    return function (dt) {
        var formatted = '';

        if (dt) {
            var hours24 = dt.getHours();
            var hours = ((hours24 + 11) % 12) + 1;
            formatted = [formatted, [addZero(hours), addZero(dt.getMinutes())].join(":"),hours24>11?"pm" :"am"].join(" ");            
        }
        return formatted;
    }
})();


var currentTime = formatTime(new Date());
var startTime='8:30 AM';
var endTime=‘下午6:30’;
var formatTime=(函数(){
函数addZero(num){
返回(num>=0&&num<10)?“0”+num:num+”;
}
返回函数(dt){
var格式=“”;
if(dt){
var hours24=dt.getHours();
变量小时=((小时24+11)%12)+1;
格式化=[格式化,[addZero(hours),addZero(dt.getMinutes())]。加入(“:”,小时24>11?”下午:“:”上午]。加入(“”;
}
返回格式;
}
})();
var currentTime=formatTime(新日期());
我需要检查当前时间是否介于startTime和EndTime之间

如果只有几个小时,我就可以从startTime、endTime和currentTime中提取冒号前面的第一个字符,并进行这样的比较

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

if(currentTime>=startTime&¤tTime类似的东西应该可以工作

var startTime='6:30 PM';
var endTime='8:30 AM';
var now=新日期();
var startDate=dateObj(startTime);//获取日期对象
var endDate=dateObj(endTime);
如果(startDate>endDate){//检查开始是否在结束之前
var temp=startDate;//如果是这样,假设它跨越了午夜
startDate=endDate;//并交换日期
结束日期=温度;
}
var open=nowstartDate?'open':'closed';//比较
console.log('餐厅是'+开放的);
函数dateObj(d){//日期分析器。。。
var parts=d.split(/:|\s/),
日期=新日期();
如果(parts.pop().toLowerCase()=='pm')部分[0]=(+parts[0])+12;
日期设置小时(+parts.shift());
date.setMinutes(+parts.shift());
返回日期;
}

。由于控制台包装器{top:0!important}
似乎无法处理午夜过后的时间,请尝试将时间从下午6:30更改为凌晨2:30。一个好的解决方案是将momentjs与MomentRange插件结合使用

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 today=新时刻(新日期());
var ayear=今天。年();
var amonth=today.month()+1;//0到11
var adate=today.date();
amonth=字符串(amonth)。长度<2?“0”+amonth:amonth;
adate=字符串(adate)。长度<2?“0”+adate:adate;
//创建力矩对象
var动量1,动量2;
var temp=endTime.split(“”);
如果(临时[1].toLowerCase()=“am”)
{
var test1=一年+一年+一年+一年+一年+一年+一年+一年+一年+一年+一年+一年;
var test2=一年+一年+一年+一年+一年+一年+一年+一年+一年+结束时间;
//确保这两次都不是早上
if(力矩(测试2).isAfter(测试1))
{
var moment1String=ayear+“-”+amonth+“-”+adate+“+startTime;
var moment2String=ayear+“-”+amonth+“-”+adate+“+endTime;
}
其他的
{
var moment1String=ayear+“-”+amonth+“-”+adate+“+startTime;
var moment2String=ayear+“-”+amonth+“-”+(adate+1)+“+endTime;
}
moment1=力矩(moment1String,“YYYY-MM-DD HH:MM A”);
moment2=力矩(moment2String,“YYYY-MM-DD HH:MM A”);
}
其他的
{
var moment1String=ayear+“-”+amonth+“-”+adate+“+startTime;
var moment2String=ayear+“-”+amonth+“-”+adate+“+endTime;
moment1=力矩(moment1String,“YYYY-MM-DD HH:MM A”);
moment2=力矩(moment2String,“YYYY-MM-DD HH:MM A”);
}
//运行检查
var start=moment1.toDate();
var end=动量2.toDate();
风险价值;
if(字符串(时间).toLowerCase()=“现在”)
{
当=时刻(新日期());
}
其他的
{
var timeMoment1String=ayear+“-”+amonth+“-”+adate+”+时间;
当=时刻(timeMoment1String);
}
变量范围=力矩范围(开始、结束);
在(范围)内时返回;
}
var startTime='02:30 AM';
var endTime='13:00 PM';
var now=新日期();
var startDate=dateObj(startTime);
var endDate=dateObj(endTime);
警报(结束日期)
var open=nowstartDate?'open':'closed';
警报('餐厅'+开放);
函数dateObj(d){
var parts=d.split(/:|\s/),
日期=新日期();
如果(parts.pop().toLowerCase()=='pm')部分[0]=(+parts[0])+12;
日期设置小时(+parts.shift());
date.setMinutes(+parts.shift());
返回日期;

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

如果结束时间在午夜之后(即开始时间为15:00,结束时间为01:00),则有三种情况:

  • 您处于开始和结束时间之后的时间,如16:00,在这种情况下,您处于营业时间内
  • 您处于开始和结束时间之前的时间,如00:30,在这种情况下,您也在营业时间内
  • 您在结束时间之后,但在开始时间之前,如02:30,在这种情况下,您在工作时间之外
  • 以下是我的代码示例:

    const isCurrentDayPart=(dayPart)=>{
    设currentTime=力矩();
    让startTime=时刻(dayPart.startTime,“HH:mm”);
    设endTime=力矩(dayPart.endTime,“HH:mm”);
    if(dayPart.startTime