2014-09-27 37 views
4

我做了餐馆送货到家网站,根据餐厅的宅配时序我需要启用/禁用现在订购按钮如何检查是否当前时间落入特定的范围也在考虑分钟

我有开始时间和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()); 

我需要检查,如果当前时间是在开始时间和结束时间或不之间

如果只有个小时,我可以从结肠之前提取的第一个字符开始时间,结束时间和currentTime的,做这样的

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

一对比,但我需要拿分也考虑到,所以请你让我怎么做T他的比较,如果分钟考虑在内?

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

回答

8

像这样的东西应该工作

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}

它分裂的时间,并增加了12 PM倍,然后创建可轻松比较的日期对象。

+0

不客气! – adeneo 2014-09-28 09:10:02

+0

非常有帮助,很好的解决方案..干杯! – 2015-12-10 20:33:27

+0

时间范围穿越午夜时不起作用。 – 2017-03-09 20:01:25

0

似乎不适用于午夜过后的时间,请尝试将时间从下午6:30改为上午2:30。一个好的解决方案是使用momentjs随刻范围插件

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); 
} 
0

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; 
 
}

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

 
var now  = new Date(); 
 
var startDate = dateObj(startTime); 
 
var endDate = dateObj(endTime); 
 

 
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; 
 
}

相关问题