Vergleich von Daten zum Abrufen von Daten
Frage
Ich habe Daten in MongoDB so etwas
{ "_id" : ObjectId("4f0ee7310b09f7a254000001"), "createdAt" : ISODate("2012-01-12T23:58:28Z") }
{ "_id" : ObjectId("4f0ee7350b09f7a254000002"), "createdAt" : ISODate("2012-01-12T23:58:28Z") }
{ "_id" : ObjectId("4f0ee855e63cecb654000001"), "createdAt" : ISODate("2012-01-13T00:03:59Z") }
{ "_id" : ObjectId("4f0ee859e63cecb654000002"), "createdAt" : ISODate("2012-01-13T00:04:08Z") }
{ "_id" : ObjectId("4f0ee97c212d70bc54000001"), "createdAt" : ISODate("2012-01-13T00:08:54Z") }
{ "_id" : ObjectId("4f0ee99f212d70bc54000002"), "createdAt" : ISODate("2012-01-13T00:09:27Z") }
Ich möchte nur den Datensatz basierend auf dem Datum anzeigen. Überprüfen Sie meinen Code. Es gibt mir nichts zurück
//dateStr = '120112' or '120113'
var year = '20' + dateStr.substring(0,2);
var month = dateStr.substring(2,4);
var day = dateStr.substring(4);
dateStr = new Date(year,month,day,0,0,0);
var nextDate = new Date(year,month,day,23,59,59);
GPSData.find({"createdAt" : { $gte : dateStr, $lte: nextDate }}, function(err, data) {
if(err)
console.log(err);
res.writeHead(200, {
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "*"
});
var body = JSON.stringify(data);
res.end(body); //no output here just []
});
Aber auf Mongo -Shell mit diesem Befehl erhalte ich Ergebnisse für das Datum '120112'
db.gpsdatas.find({"createdAt" : {new ISODate("2012-01-12T00:00:00Z"), $lte: new ISODate("2012-01-12T23:59:59Z") }});
Lösung
Ihr Problem ist Ihr Verständnis der Datumsklasse. Ich gehe davon aus, dass Sie versuchen, ein Datumsobjekt für den 12. Januar zu erstellen, aber das neue Datum (2012, 1, 12) ist tatsächlich der 11. oder 12. Februar, abhängig von der lokalen Zeitzone. Daher führt Ihr Code nicht die Abfrage aus, die Sie in der Shell ausführen.
Lesen Sie hier über Details http://www.w3schools.com/jsref/jsref_obj_date.asp
Andere Tipps
Blinde Antwort, ohne dass ich alleine testet: Was passiert, wenn diese Zeile vor der GPSData.find (..) -Linie hinzufügen?
dateStr = dateStr.toString();
nextDate = nextDate.toString();
Versuchen Sie auch eine Konsole.log, um zu sehen, wie die Ausgangszeichenfolge aussieht. Es kann in einem völlig anderen Format sein als erwartet.