Reputation:
I need one help. I need to break data as per start date and end date
using Javascript. I am explaining my code below.
var data = {
eid: "9",
end_date: "2018-01-14",
event: true,
mname: "test event2",
start_date: "2018-01-12",
user_type: "1"
}
Here I have start_date =2018-01-12" and end_date:"2018-01-14"
in this array. I need to get all the data for each date from start date and end date
and the expected output
is given below.
var data = [{
eid: "9",
date: "2018-01-12",
event: true,
mname: "test event2",
user_type: "1"
}, {
eid: "9",
date: "2018-01-13",
event: true,
mname: "test event2",
user_type: "1"
}, {
eid: "9",
date: "2018-01-14",
event: true,
mname: "test event2",
user_type: "1"
}]
My output should be like above.
Upvotes: 0
Views: 1707
Reputation: 13669
Try This
var InputData = {
eid: "9",
end_date: "2018-01-14",
event: true,
mname: "test event2",
start_date: "2018-01-12",
user_type: "1"
}
var StartDate=moment(InputData.start_date, "YYYY-MM-DD");
var EndDate=moment(InputData.end_date, "YYYY-MM-DD");
var Days=EndDate.diff(StartDate, 'days')
var OutputData=[];
var firstObj={
eid: InputData.eid,
date: moment(StartDate).format("YYYY-MM-DD"),
event:InputData.event ,
mname:InputData.mname,
user_type: InputData.user_type
}
OutputData.push(firstObj);
for(var i=1;i<Days+1;i++){
var mydate=moment(StartDate).add(i, 'day').format("YYYY-MM-DD");
var myObj={
eid: InputData.eid,
date: mydate,
event:InputData.event ,
mname:InputData.mname,
user_type: InputData.user_type
};
OutputData.push(myObj);
}
console.log(OutputData);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>
Upvotes: 0
Reputation: 2719
just use the date start_date
and end_date
to compare.
var obj = {
eid: "9",
end_date: "2018-01-14",
event: true,
mname: "test event2",
start_date: "2018-01-12",
user_type: "1"
}
var data = [{
eid: "9",
date: "2018-01-12",
event: true,
mname: "test event2",
user_type: "1"
}, {
eid: "9",
date: "2018-01-13",
event: true,
mname: "test event2",
user_type: "1"
}, {
eid: "9",
date: "2018-01-14",
event: true,
mname: "test event2",
user_type: "1"
},
{
eid: "9",
date: "2018-01-16",
event: true,
mname: "test event2",
user_type: "1"
}]
var newdata = data.filter((item) => {
return new Date(item.date) > new Date(obj.start_date) && new Date(item.date) < new Date(obj.end_date)
})
console.log(newdata);
Upvotes: 0
Reputation: 22534
Create date object using the start_date
and end_date
and iterate from the start date to end date using while loop and keep adding the object in your array.
var data = {
eid: "9",
end_date: "2018-01-14",
event: true,
mname: "test event2",
start_date: "2018-01-12",
user_type: "1"
},
endDate = new Date(data.end_date),
startDate = new Date(data.start_date),
result = [];
function formatDate(date) {
var d = new Date(date),
month = '' + (d.getMonth() + 1),
day = '' + d.getDate(),
year = d.getFullYear();
if (month.length < 2) month = '0' + month;
if (day.length < 2) day = '0' + day;
return [year, month, day].join('-');
}
while(endDate >= startDate) {
var {eid, event, mname, user_type} = data;
result.push({eid, event, mname, user_type, date: formatDate(startDate)});
startDate.setDate(startDate.getDate() + 1);
}
console.log(result);
Upvotes: 2