PHP - rango de fechas

 
Vista:
sin imagen de perfil
Val: 162
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

rango de fechas

Publicado por noe (178 intervenciones) el 10/05/2022 23:30:12
Hola foro !!!
Espero me puedan ayudar y es con que sigue lo que pretendo es saber si el usuario introdujo una fecha ya este registrado ejemplo 01-05-2022 al 05-05-2022 del 1 al 5 del mes mayo no se podrán utilizar esas fechas tengo este script pero no hace lo que pretendo
GRACIAS
<?php
$f1 = $_POST['fini'];
$f2 = $_POST['ffin'];
$h1 = $_POST['hini'];
$h2 = $_POST['hfin'];

$pdo = new PDO("mysql:dbname=calendario_db; host=localhost","root","12345678",
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
$pide = $pdo->query("SELECT * From eventos");
$tdan = $pide->fetchAll(PDO::FETCH_OBJ);

$pide = $pdo->prepare("SELECT * From eventos Where fini Between '?' and '?' ");
$pide->execute([$f1,$f2]);
$tdan = $pide->fetchAll(PDO::FETCH_OBJ);

$fecha = $pide->rowCount();
if ($fecha > 0){
echo 'la fecha que digito esta en medio de una registrada';
}else{
echo 'no encontro fechas';
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Ivan

rango de fechas

Publicado por Ivan (118 intervenciones) el 11/05/2022 10:35:00
Hola,

por lo que dices entiendo lo siguiente:

1 - En tu base de datos tienes registrados una serie de eventos con una fecha de inicio y una fecha de fin
2 - Un usuario rellena un formulario para reservar tambien una fecha de inicio y una fecha de fin para su evento
3 - Quieres hacer una consulta a tu DB para saber si el rango de fechas del usuario ya está reservado

Entonces vamos a suponer que en tu DB tienes los campos tipo DATE (YYYY-MM-DD) siguientes eventoInicio, eventoFinal
En el formulario que envía el usuario llegan los campos fechaInicio, fechaFinal

La lógica de la consulta en la DB sería comparar si fechaInicio o fechaFinal se encuentran entre eventoInicio y eventoFinal

1
SELECT * FROM tabla WHERE (fechaInicio BETWEEN eventoInicio AND eventoFinal) OR (fechaFinal BETWEEN eventoInicio AND eventoFinal)

Si existen resultados entonces es que almenos una fecha del usuario ya está reservada por un evento y ese evento será el resultado devuelto.

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 162
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

rango de fechas

Publicado por noe (178 intervenciones) el 14/05/2022 15:05:30
Hola Iván !
gracias por responder, hasta el día de hoy pude ver tu respuesta estuve un poco mal de salud pero lo pondré en práctica y más tarde lo comento

GRACIAS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 162
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

rango de fechas

Publicado por noe (178 intervenciones) el 15/05/2022 17:50:59
hola Ivan buenos dias !!!

puse en practica como lo comentas
SELECT * FROM tabla WHERE (fechaInicio BETWEEN eventoInicio AND eventoFinal) OR (fechaFinal BETWEEN eventoInicio AND eventoFinal), pero no funciona efectivamante lo que pretendo es que si los dias del 1 al 5 de mayo esta marcados y pretendes meter dias que estan dentro de ese rango no lo puedan registrar

lo cambie asi y funciona pero solo para un dia
$pide = $pdo->prepare("SELECT * From eventos Where (fini BETWEEN ? and ?) ");
$pide->execute([$f1,$f2]);

lo pongo asi
$pide = $pdo->prepare("SELECT * From eventos Where (fini BETWEEN ? and ?) or (ffin BETWEEN ? and ?)");
$pide->execute([$f1,$f2]);
y no funciona que estoy asiendo mal?
GRACIAS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ivan

rango de fechas

Publicado por Ivan (118 intervenciones) el 15/05/2022 20:31:59
Hola,

Normalmente un formulario tiene el formato de fecha "humano" DD-MM-YYYY y como dije, vamos a suponer que en tu DB tienes los campos tipo fecha YYYY-MM-DD, este es el formato con el que trabaja Mysql y las fechas del formulario, o incluso de tu DB si usas TIMESTAMP, las debes transformar a este formato con DATE_FORMAT.

Si te fijas, una fecha YYYY-MM-DD transformada a un número como 20220515 se puede ordenar de mayor a menor y es muy fácil de comparar para Mysql.

Por lo que creo que no estás comparando las fechas correctamente.

Una sententencia como:

1
SELECT * FROM eventos WHERE ('2022-05-03' BETWEEN eventoInicio AND eventoFinal) OR ('2022-05-08' BETWEEN eventoInicio AND eventoFinal)

Con los campos de tu DB tipo:
eventoInicio: 2022-05-01
eventoFinal: 2022-05-05

funcionaría correctamente (fíjate en las comillas)

En definitiva se trata de pasar las fechas de nuestro formato "visual" a un formato con el que Mysql pueda trabajar. Si en tu DB no tienes los campos fecha exactamente como YYYY-MM-DD puedes usar la expresión DATE_FORMAT así:

1
2
3
SELECT * FROM usuarios WHERE
('2022-05-03' BETWEEN DATE_FORMAT(eventoInicio, "%Y-%m-%d") AND DATE_FORMAT(eventoFinal, "%Y-%m-%d")) OR
('2022-05-08' BETWEEN DATE_FORMAT(eventoInicio, "%Y-%m-%d") AND DATE_FORMAT(eventoFinal, "%Y-%m-%d"))

Pese a todo, si los formatos de fecha son correctos y sigue sin funcionar también he visto que podrías estar añadiendo tus variables PHP con los siguientes errores:

Cuando utilizas variables PHP dentro de sentencias Mysql, generalmente (salvo alguna excepción) deben ir entre comillas y precedidas de $ evidentemente.

1
SELECT * FROM eventos WHERE ('$fini' BETWEEN eventoInicio AND eventoFinal) OR ('$ffin' BETWEEN eventoInicio AND eventoFinal)

Espero que con todo esto te funcione.

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 162
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

rango de fechas

Publicado por no (178 intervenciones) el 16/05/2022 03:11:22
Hola Ivan
gracias por responder en mi bd los campo fini y ffin es de tipo date, en el formulario introduzco las fechas asi 07/05/2022 y 08/05/2022

le hago un echo y lo muestra asi 2022-05-07 y 2022-05-08
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ivan

rango de fechas

Publicado por Ivan (118 intervenciones) el 16/05/2022 10:00:34
Hola,

vale, ahora lo veo, el problema está en que no nos hemos entendido en cuales son las variables del formulario y cuales las de la DB.

Especifiqué:

Entonces vamos a suponer que en tu DB tienes los campos tipo DATE (YYYY-MM-DD) siguientes eventoInicio, eventoFinal
En el formulario que envía el usuario llegan los campos fechaInicio, fechaFinal


Al ver tu respuesta con los campos fini y ffin, lo interpreté como que eran tus variables de formulario, no los campos de la DB ... Error mío por mirar las cosas rápido ...

Así que tu consulta quedaría así:

1
2
$pide = $pdo->prepare("SELECT * From eventos Where (? BETWEEN fini and ffin) or (? BETWEEN fini and ffin)");
$pide->execute([$f1,$f2]);

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 162
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

rango de fechas

Publicado por noe (178 intervenciones) el 18/05/2022 19:16:36
lo pondre en practica

GRACIAS Ivan
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 162
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

rango de fechas

Publicado por noe (178 intervenciones) el 19/05/2022 02:00:23
WoW hurra.....
ya funciono.......
gracias por compartir tus conocimientos, tu tiempo y tu calma, te estoy muy agradecido
GRACIAS Ivan
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar