5

我有一个动态开盘和关盘时间的酒吧时间表,我必须计算 currentTime 是否在今天的开盘时间内。

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

我在这个项目上使用 jquery。

4

5 回答 5

7

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

如果您对开始和结束时间以及当前时间都这样做,如果您的当前时间介于开始和结束之间,那么它将大于开始毫秒并且小于结束毫秒。

只是一个注释,而不是Date().getTime();你可以真正做到这一点,因为+new Date;我从浏览网络中学到了一些东西。谷歌再次获胜:)。这是因为 + 本质上将日期转换为 int。

于 2012-07-20T11:24:05.233 回答
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 示例并更改开始时间以查看其变化情况

于 2012-07-20T11:34:43.160 回答
1

老实说,我对jquery一无所知,因此只能提供一般性建议。

订单是否“固定”?如:第一场总是开放时间,第二场总是关闭时间?

如果是这样,答案相当简单……当字段二小于字段一时,添加一个“特殊情况”。而不是检查 'timestamp > openTime && timestamp < 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' 你必须确保你总是检查正确的工作日,就像乔恩泰勒已经说过的那样......但老实说,你可能最好使用他的解决方案。

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

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

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

明白我的意思吗?

于 2012-07-20T11:29:24.797 回答
0

如果收盘时间在开盘时间之前,它跨越了一天,你必须以不同的方式确定它:

if (closingTime >= openingTime) {
    // Open during the day
    return currentTime >= openingTime && currentTime < closingTime;
} else {
    // Open across midnight
    return currentTime >= openingTime || currentTime < closingTime;
}
于 2012-07-20T11:32:51.577 回答
0

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

于 2012-07-20T11:33:19.553 回答