如何验证时间表

时间:2017-10-20 02:27:31

标签: javascript angularjs angular firebase momentjs

我需要验证某个时间是否在另外两个之间。例如:

今天:星期四,晚上11:39

商店X的营业时间为周四凌晨00:00至晚上11:59(复数形式,为其记录)。因此,函数isOpen返回true。

我为此做了一个解决方法,将其写在数据库(Firebase)上:

// for all elements
 #(IdNumber) {width: (IdNumber)%;} 

开启和关闭的时间是从1970年1月1日起的毫秒数

在函数中,我检查数据库中是否有一天与当天匹配,之后我需要在1970年1月1日晚上11:39创建一个日期并检查open是否更小而close更大比当前时间。

{
  "open" : 7200000,
  "day" : "Thursday",
  "close" : 93540000
}

并查看我的

let open = false;
if (store.schedule) {
    for (sch in store.schedule) {
        if (store.schedule[sch].day == day) {
            open = self.checkHour(store.schedule[sch].open, store.schedule[sch].close);
        }
    }
}
return open;

PS:我正在使用moment.js

我知道可怕的,可怕的解决方案。我确信有更好的方法。

1 个答案:

答案 0 :(得分:0)

不要尝试手动查询数据库,让数据库自己进行查询。

您从未解释过您正在使用哪个数据库,但大部分都是您可以使用的某种“日期时间”字段。然后,您可以在查询中传递格式化的日期字符串,并检查它是否大于open字段且小于close字段。

例如,在SQL中你可以这样做:

SELECT * FROM stores WHERE {date} >= open and {date} <= close;

在这种情况下,{date}将是您传递给查询的格式化日期。

也就是说,如果您已经有问题的商店,您只需比较您在javascript对象中已有的数据。

var store = {
  "open" : 7200000,
  "day" : "Thursday",
  "close" : 93540000
};

var now = Date.now();

if (now >= store.open && now <= store.close) {
  // you are in range
}