2016-11-30 11 views
1

私は1000個以上のオブジェクトの配列を持ち、配列内のすべてのオブジェクトには日付と時刻のフィールドが含まれています。このレコードは、以下に示すように毎秒DBに挿入されます。ここでは、現在の日付+時間+秒に基づいて分と秒を含む7日間のレコードを取得したいと思います。タイムスタンプに基づいてオブジェクトの配列をフィルタリングする方法

例:

[{ 
    "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 
}] 

私はJSやjqueryの

+0

この配列は、連続的に、いくつかの時間間隔後に挿入されたオブジェクト、すなわち動的でれるますか? – abhishekkannojia

+0

あなたの時間形式をもっと説明してください。 –

+0

あなたの期待どおりのフィルタに私の下の答えを試すことができます。これを見る機会がありましたか? – Aruna

答えて

0

を使用してこれを行うことができますどのように教えてくださいあなたことができるように、このような何か。

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

私はOPが過去7日間の記録を望んでいると思います。 – abhishekkannojia

+0

スニペットを変更しました。 – Sreekanth

1

あなたはこれを達成するために、以下のようにフィルタを使用することができます。ここで

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

あなたdateデータ型がすでにDateであれば、あなたはnew Date(d.date)再び日付に変換する必要はありません。

また、getTime()なしで動作します。

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

これは、日付が確実に月の最初の週に含まれていないときにうまくいきます。現在の日付が12/01/2016の場合にこれが機能するかどうかはわかりません。 – Sreekanth

+0

はいこれはすべての日付で機能します。 – Aruna

+0

私は気づいていない、それは動作します!アップ! – Sreekanth

関連する問題