2017-10-20 76 views
0

我需要驗證某個時間是否在另外兩個之間。例如:如何驗證計劃

今日:星期四下午11點39分

商店X是從00:00 AM到11:59 PM星期四打開(在複數,其recorrent)。所以,函數isOpen返回true。

我已經解決類​​似的問題,數據庫(火力地堡)在寫這篇:

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

在哪裏打開和關閉是從01/01/1970

毫秒我檢查功能數據庫中有一天與當天匹配,在此之後,我需要在01:01/1970和11:39 PM之間創建一個Date,並檢查open是否較小,並且close大於當前時間。

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; 

而且checkHour

checkHour = function (open, close) { 
    return moment().year(1970).month(0).date(1).isBetween(moment(open), moment(close)); 
}; 

PS:我使用moment.js

可怕,可怕的解決方案,我知道了。我確信有更好的方法。

+0

請用您的代碼示例更新您的問題。 – Soviut

+0

另外,解釋你使用的是什麼數據庫。 – Soviut

+0

@Soviut我在這個問題上做了一個例子。我正在使用Firebase – Ace

回答

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 
} 
+0

打開和關閉時間從1970年開始,Date.now()將總是大於兩者。 – Ace

+0

感謝您解釋查詢,我沒有意識到我做錯了,我要重做搜索直接進入數據庫 – Ace