2017-10-20 2 views
0

Ich muss überprüfen, ob eine bestimmte Zeit zwischen zwei anderen liegen. Zum Beispiel:So überprüfen Sie die Zeitpläne

Heute: Donnerstag, 23.39

Der Laden X ist offen von 0.00 bis 11.59 Uhr Donnerstag (in Plural, seine recorrent). Eine Funktion isOpen gibt also true zurück.

ich eine Abhilfe für dieses gemacht haben, diese (Firebase) auf die Datenbank geschrieben:

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

Wo öffnen und schließen ist Millisekunden vom 01.01.1970

In der Funktion, die ich überprüfen, ob Es gibt einen Tag in der Datenbank, der dem aktuellen Tag entspricht. Danach muss ich ein Datum vom 01.01.1970 mit 11:39 PM erstellen und prüfen, ob open kleiner und close größer als die aktuelle Zeit ist.

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; 

Und checkHour

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

PS: Ich bin moment.js

Schreckliche, schreckliche Lösung, ich weiß. Ich bin mir sicher, dass es einen besseren Weg gibt.

+0

Bitte aktualisieren Sie Ihre Frage mit einem Beispiel Ihres Codes. – Soviut

+0

Erläutern Sie auch, welche Datebase Sie verwenden. – Soviut

+0

@Soviut Ich gebe ein Beispiel in der Frage. Ich verwende Firebase – Ace

Antwort

0

Versuchen Sie nicht, Ihre Datenbank manuell abzufragen, lassen Sie die Datenbank ihre eigenen Abfragen durchführen.

Sie haben nie erklärt, welche Datenbank Sie verwenden, aber am ehesten ein "Datetime" -Feld einer Art, die Sie verwenden können. Sie können dann eine formatierte Datumszeichenfolge in der Abfrage übergeben und prüfen, ob sie größer als das Feld open und kleiner als das Feld close ist.

Zum Beispiel in SQL würden Sie tun:

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

In diesem Fall {date} das formatierte Datum würden Sie in die Abfrage vorbei sind.

Das heißt, wenn Sie bereits den Speicher in Frage haben, können Sie einfach die Daten vergleichen, die Sie bereits in Ihrem Javascript-Objekt haben.

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

var now = Date.now(); 

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

öffnen und schließen sind Zeiten von 1970, Date.now() wird immer größer als beide sein. – Ace

+0

Danke für die Abfrage, ich merke nicht, dass ich falsch mache, ich werde die Suche direkt in die Datenbank wiederholen – Ace

Verwandte Themen