从当前时间javascript中删除超过一年的时间戳属性

时间:2018-03-28 21:03:43

标签: javascript datetime ecmascript-6 datetime-format

我有一个带有时间戳的对象,以毫秒为单位:

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];
})

3 个答案:

答案 0 :(得分:1)

另一种方法是使用函数reduce以及操作one year - date in object

此方法将创建一个日期不超过一年的新数组。

&#13;
&#13;
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;
&#13;
&#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];
})