我有一个带有时间戳的对象,以毫秒为单位:
const indexes = {
index1: 1490659200000 // 2017-03-28
index2: 1490659200000 // 2017-03-28
index3: 1498608000000 // 2017-06-28
}
如何删除当前时间超过一年的时间戳的索引。 new Date().getTime()
- 1522269838207
。
实际上,循环访问对象和删除超过1年的时间戳的更快方法是什么。也许更好的只是转换为yyyy-mm-dd而不是比较yyyy,mm-dd
Object.keys(indexes).forEach(i => {
if (indexes[i] < new Date().getTime())
delete indexes[i];
})
答案 0 :(得分:1)
另一种方法是使用函数reduce
以及操作one year - date in object
此方法将创建一个日期不超过一年的新数组。
const indexes = { index1: 1490659200000, index2: 1490659200000, index3: 1498608000000}
var oneYearAgo = new Date();
oneYearAgo.setFullYear( oneYearAgo.getFullYear() - 1 );
var result = Object.keys(indexes).reduce((a, c) => {
if (oneYearAgo.getTime() - indexes[c] > 0) a.push(indexes[c]);
return a;
}, [])
console.log(result);
&#13;
答案 1 :(得分:1)
这取决于“超过一年”的确切程度。如果我们认为那一年有365天,那么:
const indexes = {
index1: 1490659200000, // 2017-03-28
index2: 1490659200000, // 2017-03-28
index3: 1498608000000 // 2017-06-28
}
var currentDate = new Date();
var year = 365 * 24 * 60 * 60 * 1000;
for (var index in indexes) {
if (indexes[index] < (currentDate - year)) delete indexes[index];
}
答案 2 :(得分:1)
const YEAR_IN_MS = 31556952000; // Year in milliseconds
var now = Data.now(); // current timestamp
Object.keys(indexes).forEach(i => {
if (now - indexes[i] >= YEARS_IN_MS) // get difference time and check if greater or equal than year
delete indexes[i];
})