Home > Software engineering >  Build a function that returns events that are currently happening in the present within a selected t
Build a function that returns events that are currently happening in the present within a selected t

Time:10-27

I am fairly new in NodeJS, and I am trying to build an event management system where the user can see events that are happening now, upcoming events and past events. I have built a model called events which has attributes startDate and endDate which a user selects upon creation of an event. I need to list events that are happening in the present, this is the function I have built so far, however, it doesn't work and I am pretty sure there is some mistakes in the syntax too. I would really appreciate anyone's help on this :)

exports.listPresent = async (req, res) => {
    try {

        const event = await Event.find({})
    
        const eventPresent = [];

        for (let i = 0; i < event.length; i  ) {


            var dateArr = event[i].startDate.toString().split("-");
            var dateArr2 = event[i].endDate.toString().split("-");
            var inputDate = new Date('"'   dateArr[2]   "-"   dateArr[1]   "-"   dateArr[0]   '"').setHours(0, 0, 0, 0);
  
            var inputDate2 = new Date('"'   dateArr2[2]   "-"   dateArr2[1]   "-"   dateArr2[0]   '"').setHours(0, 0, 0, 0);
            
            var toDay = new Date().setHours(0, 0, 0, 0);
            
            if (event[i].startDate != null && event[i].startDate != '' && event[i].endDate !=null && event[i].endDate != '') {

                if(inputDate == toDay || (inputDate >= toDay && inputDate <= inputDate2)){  
                     eventPresent.push(i);
                }
            }
            return eventPresent;;
          }
 
    
    } catch (error) {
    res.status(500).json( { error: error.message });
    }
};

I tried writing a function (the one above) but I am new at JavaScript and I am a bit lost on how to make this work.

CodePudding user response:

The logic is correct in this one, you just need to replace "return eventPresent" to res.status(200).json(eventPresent) - and put this outside the for loop, and also eventPresent.push(i) with eventPresent.push(event[i]), as you are only pushing the index into the array, and not the actual element as such:

    exports.listPresent = async (req, res) => {
    try {

        const event = await Event.find({})
    
        const eventPresent = [];

        for (let i = 0; i < event.length; i  ) {


            var dateArr = event[i].startDate.toString().split("-");
            var dateArr2 = event[i].endDate.toString().split("-");
            var inputDate = new Date('"'   dateArr[2]   "-"   dateArr[1]   "-"   dateArr[0]   '"').setHours(0, 0, 0, 0);
  
            var inputDate2 = new Date('"'   dateArr2[2]   "-"   dateArr2[1]   "-"   dateArr2[0]   '"').setHours(0, 0, 0, 0);
            
            var toDay = new Date().setHours(0, 0, 0, 0);
            
            if (event[i].startDate != null && event[i].startDate != '' && event[i].endDate !=null && event[i].endDate != '') {

                if(inputDate == toDay || (inputDate >= toDay && inputDate <= inputDate2)){  
                     eventPresent.push(event[i]);
                }
            }
       
          }

 res.status(200).json(eventPresent);
 
    
    } catch (error) {
    res.status(500).json( { error: error.message });
    }
};

Hope this helps! :)

  • Related