user5443928
user5443928

Reputation:

How to break the data in between start date and end date using Javascript

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

Answers (3)

Saurabh Mistry
Saurabh Mistry

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

zabusa
zabusa

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

Hassan Imam
Hassan Imam

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

Related Questions