'Filtering elements of array on the basis of dates
I have a array as follows:
data = [
{
"startDate": "2021-08-18T00:00:04.498059"
"endDate": "2021-08-19T00:00:04.4962889"
},
{
"startDate": "2021-08-18T00:00:04.498059"
"endDate": "2021-08-19T00:00:04.4962889"
}
]
newArray = [];
this.data.foreach(element => {
if((element.startDate - element.endDate) > 7) {
this.newArray.push(element);
}
})
I want to traverse the above array and check if difference between startDate and endDate is greater than 7 days for any element, than push that element to a new array.
Because of the date format I don't know my approach is correct or not. How can I do this correctly?
Solution 1:[1]
Simple JavaScript logic.
- Calculate time difference in millisecond between start date and end date.
- Convert the time into days by dividing with (1000 * 60 * 60 * 24).
Logic for (1000 * 60 * 60 * 24) => 1000 ms = 1 second, 60 seconds = 1 minute, 60 minute = 1 hour, 24 hours = 1 day.
const data = [
{ "startDate": "2021-08-18T00:00:04.498059", "endDate": "2021-08-19T00:00:04.4962889" },
{ "startDate": "2021-08-18T00:00:04.498059", "endDate": "2021-08-26T00:00:04.4962889" },
{ "startDate": "2021-08-18T00:00:04.498059", "endDate": "2021-08-19T00:00:04.4962889" }
];
const newArray = [];
data.forEach(element => {
const diffTime = new Date(element.endDate) - new Date(element.startDate);
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
if (diffDays > 7) {
newArray.push(element);
}
});
console.log(newArray);
Solution 2:[2]
const data = [
{
"startDate": "2021-08-18T00:00:04.498059",
"endDate": "2021-08-19T00:00:04.4962889"
},
{
"startDate": "2021-08-18T00:00:04.498059",
"endDate": "2021-08-19T00:00:04.4962889"
}
]
const newData = [];
data.forEach(element => {
const startDate = new Date(element.startDate);
const endDate = new Date(element.endDate);
const difference = endDate.getTime() - startDate.getTime();
if (difference > 604800000) {
newData.push(element);
}
}
);
console.log(newData);
Solution 3:[3]
You can check using moment.js library
let data = [
{
startDate: "2021-08-18T00:00:04.498059",
endDate: "2021-08-19T00:00:04.4962889",
},
{
startDate: "2021-08-11T00:00:04.498059",
endDate: "2021-08-19T00:00:04.4962889",
}
];
let newArray = [];
for(let i of data){
let end= moment(i['endDate']);
let start= moment(i['startDate']);
let diff = end.diff(start, 'days')
console.log(diff);
if(diff >= 7){
newArray.push(i);
}
}
console.log(newArray);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://momentjs.com/downloads/moment.js"></script>
Solution 4:[4]
I think this is the one you are looking for:
let data = [
{
startDate: "2021-08-18T00:00:04.498059",
endDate: "2021-08-19T00:00:04.4962889",
},
{
startDate: "2021-08-11T00:00:04.498059",
endDate: "2021-08-19T00:00:04.4962889",
}
]
let newArray = [];
data.forEach(element => {
let start = new Date(element.startDate)
let end = new Date(element.endDate)
if((end-start)/1000/60/60/24 > 7)
newArray.push(element);
})
console.log(newArray)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Nitheesh |
| Solution 2 | Parvesh Kumar |
| Solution 3 | Ravi Ashara |
| Solution 4 |
