44. Validar cruce de fechas - parte 3
Los 3 Escenarios que Invalidan una Reserva
1️⃣ Fecha de Ingreso Igual a una Reserva Existente
Condición:
if (fechaIngresoUsuario == fechaIngresoReserva) {
disponibilidad = false; // ¡No disponible!
}Ejemplo:
Usuario selecciona 12/04/2024.
En BD hay una reserva que empieza 12/04/2024.
✅ Resultado: "Lo sentimos, no hay disponibilidad".
2️⃣ Fecha de Ingreso del Usuario Dentro de un Rango Ocupado
Condición:
if (
fechaIngresoUsuario > fechaIngresoReserva &&
fechaIngresoUsuario < fechaSalidaReserva
) {
disponibilidad = false; // Conflicto detectado
}Ejemplo:
Usuario selecciona 17/04/2024.
En BD hay una reserva del 16/04/2024 al 18/04/2024.
✅ Resultado: "Fecha no disponible (solapamiento parcial)".
3️⃣ Fecha de Salida del Usuario Invade una Reserva Futura
Condición:
if (
fechaIngresoUsuario < fechaIngresoReserva &&
fechaSalidaUsuario > fechaIngresoReserva
) {
disponibilidad = false; // ¡Bloqueado!
}Ejemplo:
Usuario reserva del 19/04/2024 al 23/04/2024.
En BD hay una reserva que empieza 21/04/2024.
✅ Resultado: *"No puedes reservar más allá del 21/04"*.
📌 Implementación en Código
let disponibilidad = true; // Inicialmente asumimos disponible
for (let i = 0; i < reservasBD.length; i++) {
// Escenario 1: Fechas idénticas
if (fechaIngresoUsuario == reservasBD[i].fechaIngreso) {
disponibilidad = false;
break;
}
// Escenario 2: Ingreso dentro de rango ocupado
else if (
fechaIngresoUsuario > reservasBD[i].fechaIngreso &&
fechaIngresoUsuario < reservasBD[i].fechaSalida
) {
disponibilidad = false;
break;
}
// Escenario 3: Salida invade reserva futura
else if (
fechaIngresoUsuario < reservasBD[i].fechaIngreso &&
fechaSalidaUsuario > reservasBD[i].fechaIngreso
) {
disponibilidad = false;
break;
}
}🎨 Mejoras en la Interfaz
1. Ocultar Columna Derecha si No Hay Disponibilidad
if (!disponibilidad) {
document.querySelector(".columna-derecha").style.display = "none";
} else {
document.querySelector(".columna-derecha").style.display = "block";
}¿Por qué?
Evita confusiones: Si no hay fechas disponibles, ocultamos el formulario de pago.
🚀 Próximos Pasos
En la Parte 4 (final), cubriremos:
✅ Generación de códigos de reserva únicos.
✅ Integración con pasarelas de pago.
✅ Validación de datos antes de guardar en BD.
#JavaScript #PHP #FullCalendar #DesarrolloWeb
¿Te gustaría el código completo? ¡Déjalo en los comentarios! 👇
Bonus: Si usas React/Vue, esta lógica puede adaptarse con useState o v-model.
Comentarios
Publicar un comentario