2016-11-30 5 views
1

Ich habe mehr als tausend Array von Objekten und jedes Objekt im Array enthält Datum und Uhrzeit fileds. Diese Datensätze werden wie unten gezeigt für jede Sekunde in die Datenbank eingefügt. Hier möchte ich pas 7 Tage Rekord inklusive Minuten und Sekunden basierend auf aktuelles Datum + Stunden + Sekunden bekommen.wie filter array von objekten basierend auf timestamp

Beispiel:

[{ 
    "date": "11/25/2016 08:45:58", 
    "energy": 29940913188, 
    "power": 6783, 
    "time": 217781102 
}, { 
    "date": "11/25/2016 08:46:01", 
    "energy": 29940913267, 
    "power": 6792, 
    "time": 217781105 
}, { 
    "date": "11/25/2016 08:46:02", 
    "energy": 29940913318, 
    "power": 6791, 
    "time": 217781107 
}, { 
    "date": "11/25/2016 08:46:04", 
    "energy": 29940913344, 
    "power": 6797, 
    "time": 217781108 
}, { 
    "date": "11/25/2016 08:46:05", 
    "energy": 29940913396, 
    "power": 6816, 
    "time": 217781110 
}, { 
    "date": "11/25/2016 08:46:07", 
    "energy": 29940913421, 
    "power": 6798, 
    "time": 217781111 
}, { 
    "date": "11/25/2016 08:46:08", 
    "energy": 29940913473, 
    "power": 6804, 
    "time": 217781113 
}] 

Bitte lassen Sie mich wissen, wie kann ich dies tun, indem JS oder jquery mit

+0

Ist dieses Array dynamisch d.h. werden Objekte in sie kontinuierlich nach einer gewissen Intervall eingefügt? – abhishekkannojia

+0

Bitte erläutern Sie mehr Ihr Zeitformat. –

+0

Sie können versuchen, meine nachstehende Antwort zu filtern, wie Sie es erwartet haben. Hatten Sie eine Chance, sich das anzusehen? – Aruna

Antwort

0

Man könnte so etwas wie dieses.

var input = [{ 
 
    "date": "11/22/2016 08:45:58", 
 
    "energy": 29940913188, 
 
    "power": 6783, 
 
    "time": 217781102 
 
}, { 
 
    "date": "11/25/2016 08:46:01", 
 
    "energy": 29940913267, 
 
    "power": 6792, 
 
    "time": 217781105 
 
}, { 
 
    "date": "11/25/2016 08:46:02", 
 
    "energy": 29940913318, 
 
    "power": 6791, 
 
    "time": 217781107 
 
}, { 
 
    "date": "11/25/2016 08:46:04", 
 
    "energy": 29940913344, 
 
    "power": 6797, 
 
    "time": 217781108 
 
}, { 
 
    "date": "11/25/2016 08:46:05", 
 
    "energy": 29940913396, 
 
    "power": 6816, 
 
    "time": 217781110 
 
}, { 
 
    "date": "11/25/2016 08:46:07", 
 
    "energy": 29940913421, 
 
    "power": 6798, 
 
    "time": 217781111 
 
}, { 
 
    "date": "11/25/2016 08:46:08", 
 
    "energy": 29940913473, 
 
    "power": 6804, 
 
    "time": 217781113 
 
}]; 
 

 
function filter(format) { 
 
    return input.filter((obj) => { 
 
    return obj.date.indexOf(format) !== -1; 
 
    }); 
 
} 
 

 
var last7Days = getLast7Days(); 
 
var results = last7Days.map((date) => { 
 
    return filter(date); 
 
}).filter((result) => { 
 
    return result.length != 0 
 
}); 
 

 
console.log(...results); 
 

 

 
function pad(number) { 
 
    if (number < 10) { 
 
    return '0' + number; 
 
    } 
 
    return number; 
 
} 
 

 
function getLast7Days() { 
 
    var output = []; 
 
    for (var idx = 0; idx < 7; idx++) { 
 

 
    var date = new Date(); 
 
    var last = new Date(date.getTime() - ((idx + 1) * 24 * 60 * 60 * 1000)); 
 
    var day = pad(last.getDate()); 
 
    var month = pad(last.getMonth() + 1); 
 
    var year = last.getFullYear(); 
 

 
    output.push(month + "/" + day + "/" + year); 
 
    } 
 
    console.log(output); 
 
    return output; 
 
}

+0

Ich denke OP will die letzten 7 Tage aufnehmen und nicht nur die eine. – abhishekkannojia

+0

Das Snippet wurde geändert. – Sreekanth

1

Sie die Filter wie unten verwenden können, um dies zu erreichen.

data.filter((d) => { 
    return new Date(d.date).getTime() >= seventhDay.getTime(); 
}); 

Wenn hier Ihr date Datentyp Date bereits ist, brauchen Sie nicht wieder new Date(d.date) bisher zu konvertieren.

Es funktioniert auch ohne getTime() wie unten.

return new Date(d.date) >= seventhDay; 

var data = [{ 
 
    "date": "11/20/2016 08:45:58", 
 
    "energy": 29940913188, 
 
    "power": 6783, 
 
    "time": 217781102 
 
}, { 
 
    "date": "11/25/2016 08:46:01", 
 
    "energy": 29940913267, 
 
    "power": 6792, 
 
    "time": 217781105 
 
}, { 
 
    "date": "11/25/2016 08:46:02", 
 
    "energy": 29940913318, 
 
    "power": 6791, 
 
    "time": 217781107 
 
}, { 
 
    "date": "11/25/2016 08:46:04", 
 
    "energy": 29940913344, 
 
    "power": 6797, 
 
    "time": 217781108 
 
}, { 
 
    "date": "11/25/2016 08:46:05", 
 
    "energy": 29940913396, 
 
    "power": 6816, 
 
    "time": 217781110 
 
}, { 
 
    "date": "11/25/2016 08:46:07", 
 
    "energy": 29940913421, 
 
    "power": 6798, 
 
    "time": 217781111 
 
}, { 
 
    "date": "11/21/2016 08:46:08", 
 
    "energy": 29940913473, 
 
    "power": 6804, 
 
    "time": 217781113 
 
}]; 
 

 
var seventhDay = new Date(); 
 
seventhDay.setDate(seventhDay.getDate() - 7); 
 

 

 
var filteredData = data.filter((d) => { 
 
    return new Date(d.date).getTime() >= seventhDay.getTime(); 
 
}); 
 

 
console.log(filteredData);

+0

Dies funktioniert gut, wenn das Datum nicht innerhalb der ersten Woche eines Monats sicher ist. Ich bin nicht ganz sicher, ob dies funktioniert, wenn das aktuelle Datum ist 12/01/2016 – Sreekanth

+0

Ja, das wird für alle Daten funktionieren. – Aruna

+0

Ich habe nicht realisiert, es funktioniert !! oben! – Sreekanth

Verwandte Themen