Este es mi ejemplo de base de datos:
[ { "schedule_time": "2021-05-17 12:39:29", "slot": "L", "item_date": "2021-05-18" }, { "schedule_time": "2021-05-17 12:47:53", "slot": "D", "item_date": "2021-05-18" }, { "schedule_time": "2021-05-18 13:55:22", "slot": "D", "item_date": "2021-05-19" }, { "schedule_time": "2021-05-19 16:09:15", "slot": "L", "item_date": "2021-05-20" }, { "schedule_time": "2021-05-19 16:11:55", "slot": "L", "item_date": "2021-05-20" }, Quiero crear una función que tomará item_date y verificará el horario_tiempo si hay alguna misma fecha disponible o no, luego devolverá horarios como este 9am to 12am -> 2 Scheduled; 12am to 3pm -> 1 Scheduled; 3pm to 6pm -> 0 Scheduled; 6pm to 9pm -> 2 Scheduled desde horario_hora Además, el problema es que el formato de hora de la base de datos es un reloj de 24 horas.
Por ejemplo, si hago clic en 2021-05-18, puedo ver:
9am a 12am -> 2 Horarios
12am a 3pm -> 1 Programado
15:00 a 18:00 -> 0 Horario
6pm a 9pm -> 2 Horarios
¿Alguien puede darme una idea de cómo puedo hacer esta funcionalidad similar?
Para abordar un problema como este, es útil pensar para sí mismo, "sería más fácil si los datos se vieran como X". Modele esos datos. Por ejemplo, imagine si los datos se vieran así.
const schedulesByDateAndShift = { "2021-05-17": { shift1: [ { "schedule_time": "2021-05-17 12:39:29", "slot": "L", "item_date": "2021-05-18" }, { "schedule_time": "2021-05-17 12:47:53", "slot": "D", "item_date": "2021-05-18" } ], shift2: [ /* ... */ ] }, "2021-05-18": { /* etc. */ } }; Entonces sería fácil conseguir lo que necesitas, ¿verdad? Ahora solo necesita descubrir cómo forzar sus datos actuales a este ideal. Puede hacer esto construyendo sus datos dentro de un bucle. No está claro en su publicación por qué la fecha es diferente entre schedule_time y item_date , pero supondré para este ejemplo que item_date no es relevante y solo debemos usar schedule_time .
const shifts = [ ['09:00:00', '12:00:00'], ['12:00:00', '15:00:00'], ['15:00:00', '18:00:00'], ['18:00:00', '21:00:00'] ]; const schedulesByDateAndShift = {}; for (const schedule of schedules) { const [date, time] = schedule.schedule_time.split(' '); if (!(date in schedulesByDateAndShift)) { schedulesByDateAndShift[date] = {}; } const shiftIndex = shifts.findIndex( ([start, end]) => time >= start && time < end ); if (shiftIndex === -1) { // TODO: handle case where time doesn't fit within a given shift continue; } const shiftId = `shift${shiftIndex}`; if (!(shiftId in schedulesByDateAndShift[date])) { schedulesByDateAndShift[date][shiftId] = []; } schedulesByDateAndShift[date][shiftId].push(schedule); }