2016-07-06 16 views
0

Ich weiß, dass es möglich ist, durch Zeitstempel abgefragt wird, wie in previous question gesehen, aber was ist, wenn das Datum in folgendem Format:Firebase Abfrage nach Datum Zeichenfolge

{ 
    "lambeosaurus": { 
    "date" : "2012-20-03", 
    "length" : 12.5, 
    "weight": 5000 
    }, 
"stegosaurus": { 
    "date" : "2015-25-13", 
    "length" : 9, 
    "weight" : 2500 
    } 
} 

Wie würde ich über gehen und Abfrage dies durch Datum?

Antwort

0

wandeln es in Zeitstempel:

new Date('2012-20-03'.split('-').reverse().join('/')).getTime() 

Allgemein gilt:

function toTimeStamp(dateString){ 
     return new Date(dateString.split('-').reverse().join('/')).getTime() 

    } 
+0

Müsste ich nicht alle diese Daten auf Firebase konvertieren, bevor ich es abfragen kann? – b4oshany

+0

Gib mir github URL von Firebase, und ich werde den Quellcode korrigieren, um diese Syntax zu unterstützen: 'orderByChild (function (e) {neues Datum (e.date.split ('-') ...... ...). getTime()}) ' –

+0

Ich habe eine Dummy Firebase mit einigen Dummy-Daten: https: //epilog-a3e16.firebaseio.com/flights.json – b4oshany

2

Sie haben Ihre Termine als Strings gespeichert. Bei Firebase-Bestellzeichenfolgen verwendet es lexikographische Reihenfolge. In dieser Reihenfolge steht "2012-20-03" vor "2012-25-01".

Das ist der Grund, warum die Frage, die Sie verknüpften (und die Firebase-Dokumentation) normalerweise Daten als timestamps speichern. Diese haben alle Informationen über das Datum in einer einzigen Nummer, die garantiert korrekt bestellt wird.

Alternativ können Sie das Datum als Zeichenfolge speichern. Aber in diesem Fall müssen Sie sicherstellen, dass das Datum in einem Format ist, das auch lexikografisch korrekt sortiert ist. Für Ihre Probe wäre das: "2012-01-25" und "2012-03-20".

In diesem Fall besteht Ihre einzige Option darin, die Datenstruktur entweder in die ursprüngliche Frage (und Dokumentation) oder in ein Zeichenfolgenformat zu ändern, das in der gewünschten Reihenfolge sortiert.