2016-11-30 147 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

這個效果很好,當日期不在一個月的第一週內。我不太確定,如果在當前日期爲2016年12月12日時適用 – Sreekanth

+0

是的,這適用於所有日期。 – Aruna

+0

我沒有意識到,它的工作原理!向上! – Sreekanth