-1

I am creating back-end for the fashion related application using node js where i need to show that the particular store is open or closed depending on current time. So, How do i compare the current time with the start and end time of the store? Any help would be appreciated. Timings data set which is stored in db is given below:

"timings" : [
    {
      "id": 1,
      "day": "Monday",
      "session_one": {
        "start_time": "10:00 AM",
        "end_time": "02:00 PM"
      },
      "session_two": {
        "start_time": "04:00 PM",
        "end_time": "09:00 PM"
      },
      "session_three": {
        "start_time": "03:00 PM",
        "end_time": "07:30 PM"
      }
    },
    {
      "id": 2,
      "day": "Tuesday",
      "session_one": {
        "start_time": "10:00 AM",
        "end_time": "02:00 PM"
      },
      "session_two": {
        "start_time": "04:00 PM",
        "end_time": "09:00 PM"
      },
      "session_three": {
        "start_time": "03:00 PM",
        "end_time": "07:30 PM"
      }
    },
    {
      "id": 3,
      "day": "Wednesday",
      "session_one": {
        "start_time": "10:00 AM",
        "end_time": "02:00 PM"
      },
      "session_two": {
        "start_time": "04:00 PM",
        "end_time": "09:00 PM"
      },
      "session_three": {
        "start_time": "03:00 PM",
        "end_time": "07:30 PM"
      }
    },
    {
      "id": 4,
      "day": "Thursday",
      "session_one": {
        "start_time": "10:00 AM",
        "end_time": "02:00 PM"
      },
      "session_two": {
        "start_time": "04:00 PM",
        "end_time": "09:00 PM"
      },
      "session_three": {
        "start_time": "03:00 PM",
        "end_time": "07:30 PM"
      }
    },
    {
      "id": 5,
      "day": "Friday",
      "session_one": {
        "start_time": "10:00 AM",
        "end_time": "02:00 PM"
      },
      "session_two": {
        "start_time": "04:00 PM",
        "end_time": "09:00 PM"
      },
      "session_three": {
        "start_time": "03:00 PM",
        "end_time": "07:30 PM"
      }
    },
    {
      "id": 6,
      "day": "Saturday",
      "session_one": {
        "start_time": "10:00 AM",
        "end_time": "02:00 PM"
      },
      "session_two": {
        "start_time": "04:00 PM",
        "end_time": "09:00 PM"
      },
      "session_three": {
        "start_time": "03:00 PM",
        "end_time": "07:30 PM"
      }
    },
    {
      "id": 7,
      "day": "Sunday",
      "session_one": {
        "start_time": "10:00 AM",
        "end_time": "02:00 PM"
      },
      "session_two": {
        "start_time": "04:00 PM",
        "end_time": "09:00 PM"
      },
      "session_three": {
        "start_time": "03:00 PM",
        "end_time": "07:30 PM"
      }
    }
  ]
Vikas Valechha
  • 303
  • 1
  • 5
  • 12
  • You mean check range before getting data? – Dr Upvote Mar 08 '18 at 19:19
  • Mongodb has clear mentions about this have a look https://docs.mongodb.com/manual/reference/operator/aggregation/hour/ see this https://stackoverflow.com/questions/11973304/mongodb-mongoose-querying-at-a-specific-date – Saikat Hajra Mar 08 '18 at 19:21
  • Yeah, before sending it to client, i need to check, that the requested time falls between any of the session timing. – Vikas Valechha Mar 08 '18 at 19:23
  • yes exactly @VikasValechha you have to check it in server side – Saikat Hajra Mar 08 '18 at 19:25
  • I saw this https://stackoverflow.com/questions/11973304/mongodb-mongoose-querying-at-a-specific-date, but in my case date is stored in strings not in date object, so how do i compare them? @SaikatHajra – Vikas Valechha Mar 08 '18 at 19:31

1 Answers1

1

Try this,

function timeCal(time) {
    let timeSplit = time.split(' ');
    let timeInMinutes = 0;

    if(timeSplit[1] === 'AM') {
        let timeArr = timeSplit[0].split(':');

        let hours = parseInt(timeArr[0]);
        let minutes = parseInt(timeArr[1]); 

        timeInMinutes = (hours === 12) ? minutes : (hours * 60) + minutes;

    } else if(timeSplit[1] === 'PM') {
        let timeArr = timeSplit[0].split(':');

        let hours = parseInt(timeArr[0]);
        let minutes = parseInt(timeArr[1]); 

        timeInMinutes = (hours === 12) ? (hours * 60 + minutes) : ((hours + 12) * 60) + minutes;
    }

    return timeInMinutes;
}


let time =  {
        "start_time": "10:20 AM",
        "end_time": "02:00 PM"
      };

let start = timeCal(time.start_time);
let end = timeCal(time.end_time);
let today = new Date();
let current = today.getHours() * 60 + today.getMinutes();

(start<=current && end>=current) ? console.log('open') : console.log('closed');