currentTime是否在18:00到2:00之间

时间:2012-07-20 11:19:39

标签: javascript jquery time

我有一个动态开启和关闭时间的条形时间表,我必须计算当前时间是否在今天的开放时间内。

问题是开放和关闭时间不是在同一天。如何计算currentTime是否在多天的特定时间范围内?

我在这个项目上使用jquery。

5 个答案:

答案 0 :(得分:7)

如果你使用新的Date()。getTime();这将返回自特定时间(这恰好是1970年1月1日)以来的毫秒数。

如果对开始和结束时间以及当前时间执行此操作,如果当前时间介于开始和结束之间,那么它将大于开始毫秒且小于结束毫秒。

只是一个注释,而不是Date().getTime();,你实际上可以像+new Date;那样通过环顾网络学到的东西。谷歌又赢了:)这是因为+实际上将日期转换为int。

答案 1 :(得分:3)

您可以使用javascripts日期对象计算:

var start = new Date(2012,6,20,13).getTime();
var now = new Date().getTime();
var end = new Date(2012,6,21,2).getTime();

if( (start < now ) && (now < end )) {
  console.log("opened");
}
else {
 console.log("closed");
}

将输出打开,直到明天凌晨2点,然后它将输出关闭。

您可以查看此JSBin Example并更改开始时间以查看其更改方式

答案 2 :(得分:1)

我将非常诚实,我不了解jquery,因此只能提供一般性建议。

订单是“固定的”吗? 如:在字段1中始终是开放时间,在字段2中始终是关闭时间?

如果是这样,答案很简单......当Field 2小于field 1时,添加一个'特殊情况'。 而不是检查'时间戳&gt; openTime&amp;&amp;时间戳&lt; closeTime'检查:

if(timestamp > openTime && timestamp <= Midnight || timestamp >= 0 && timestamp < closing time) {
     //Open/Close time
}

愿这有帮助吗?

更完整的代码示例可能是:

if((closeTime > openTime && timestamp > openTime && timestamp < closeTime) || //Normal time
(timestamp > openTime && timestamp < 86399) || //Before Midnight
(timestamp > 0 && timestamp < closeTime)) {    //After Midnight
    //Do Stuff
}

'closeTime'你必须确保你总是检查正确的工作日,就像Jon Taylor已经说过的那样......但是说实话,你可能最好用他的解决方案。

或者,您必须检查,假设您的白天时间是在午夜之后......并且在此工作日的开放时间之前,如果此规则适用于前一天的结束时间。

只是为了在代码中澄清这一点:

if(timestamp < openTime && openTimePrevDay > closeTimePrevDay && timestamp > closeTimePrevDay) {
    //Bar is open
}

明白我的意思?

答案 3 :(得分:0)

如果收盘时间在开盘时间之前,它会超过当天,您必须以不同方式确定:

if (closingTime >= openingTime) {
    // Open during the day
    return currentTime >= openingTime && currentTime < closingTime;
} else {
    // Open across midnight
    return currentTime >= openingTime || currentTime < closingTime;
}

答案 4 :(得分:0)

您可以查看MomentJS库。它为日期和时间处理提供了一个很好的API。