2

I have more than 1 thousand array of objects and every object inside the array contains date and time fileds. This records are inserted to DB for every seconds as shown below. Here I want get pas 7 days record including minutes and seconds based upon current date+hours+seconds.

Example:

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

Please let me know how can I do this by using JS or jquery

3
  • Does this array is dynamic i.e. are objects inserted into it continuously after some interval ? Commented Nov 30, 2016 at 7:33
  • Please explain more your time format. Commented Nov 30, 2016 at 7:53
  • You can try my below answer to filter as you expected. Have you had a chance to look at this? Commented Nov 30, 2016 at 18:09

2 Answers 2

4

You can use the filter as below to achieve this.

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

Here, if your date data type is Date already, you don't need to convert to date again new Date(d.date).

Also, it will work without getTime() as below.

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

Sign up to request clarification or add additional context in comments.

1 Comment

This works well, when the date is not within the first week of a month for sure. I m not quite sure, if this works when the current date is 12/01/2016
0

You could so something like this.

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

2 Comments

I think OP wants the past 7 days record and not just the one.
Modified the snippet.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.