Duda con fechas en PHP

Hola a todos. Tengo un problema, estoy haciendo un formulario donde el usuario puede tener la opción de hacer la busqueda entre dos...

La FAQ Duda con fechas en PHP tiene

Pertenece a la categoría:

Pregunta
Hola a todos.



Tengo un problema, estoy haciendo un formulario donde el usuario puede tener la opción de hacer la busqueda entre dos fechas.



Los resultados que se muestren deben estar comprendidos entre esas fechas.



he reducido lo fundamental:






<?php







$fecha1=31/12/1999;

$fecha2=05/10/2005;



$fecha=20/01/2003;







$fecha1 = addslashes($fecha1);

$fecha2 = addslashes ($fecha2);

$fecha = addslashes ($fecha);







if ($fecha1<$fecha)

{

if ($fecha2<$fecha)

echo "fecha2 es menor que fecha";

else

echo "fecha2 es mayor que fecha";

}

else

echo "fecha1 es mayor que fecha";



?>









He cambiado la forma de poner la fecha, etc, y por ejemplo en este caso me dice que fecha2 es menor que fecha.


Donde esta el error??


Muchas gracias



Respuesta de Horacio Santa Cruz
Hola, yo de nuevo por acá a los tiempos, he estado demasiado ocuapdo estos días.

Voy a tratar de responder a tu duda de acuerdo a lo que posteaste.

Primero hay un error en la declaración de tus variables, recuerda que en php y en algunos otros lenguajes por no decir en la mayoría el signo slash / es un signo de divición por lo que al declarar tus variables sin comillas no estás declarando una cadena de fecha sino más bien una divición, por ejemplo:

$fecha1=31/12/1999 = 0,0012923128230782057695514423878606
$fecha2=05/10/2005 = 2,4937655860349127182044887780549e-4
$fecha=20/01/2003 = 9,9850224663005491762356465302047e-4

De ahí empieza el problema de tus resultados inesperados.

Por lo que tienes que declarar las fechas cómo si estuvieras declarando string de la siguiente manera:

$fecha1="31/12/1999";
$fecha2="05/10/2005";
$fecha="20/01/2003";

Te sugiero que estas comparaciones de fechas lo hagas con enteros, es decir pasando las fechas a enteros para ser más precisos, lo puedes hacer como sigue:


$fecha1Int = mktime(0,0,0,substr($fecha1,3,2), substr($fecha1,0,2), substr($fecha1,6,4));
$fecha2Int = mktime(0,0,0,substr($fecha2,3,2), substr($fecha2,0,2), substr($fecha2,6,4));
$fechaInt = mktime(0,0,0,substr($fecha,3,2), substr($fecha,0,2), substr($fecha,6,4));

Bueno es una de las formas y luego tu pregunta con los datos enteros:

if ($fecha1Int<$fechaInt)
{
if ($fecha2Int<$fechaInt)
echo "fecha2 es menor que fecha";
else
echo "fecha2 es mayor que fecha";
}
else
echo "fecha1 es mayor que fecha";

Te sugiero revisar un poquito los estándares de programación, porque en esas pocas líneas de código que posteaste hay demasiado desorden sin ánimo de ofender, eso es fatal cuando quieres dar mantenimiento a tus aplicaciones, puedes aplicar estándares de Pear o de Zend que son similares.

Saludos, y espero haberte ayudado en algo.

Complementar la respuestaComplementar la respuesta
Volver al árbol de categoríasVolver al árbol de categorías

Comentarios
Fueron enviados 2 comentarios a la faq
2 comentarios no revisados
0 comentarios revisados

Volver al árbol de categoríasVolver al árbol de categorías
Alojados en el grupo