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.

Volver al árbol de categoríasVolver al árbol de categorías

Comentarios

Eduat

03/4/2009
tu puedes crear un objeto como
$var= nwe Date();

y de ahy ir actualizando mediante un variable la fecha
espero que te sirva de algo

Jorgitsss

03/4/2009
<?
if (!$HTTP_POST_VARS && !$HTTP_GET_VARS){
$tiempo_actual = time();
$mes = date("n", $tiempo_actual);
$ano = date("Y", $tiempo_actual);
$dia = date("d");

}else {
echo "variables vacias <br/>" ;
}
$fecha=sprintf("%04d-%02d-%02d", $ano, $mes, $dia);
$fecha1=sprintf("%04d-%02d-%02d", $ano, $mes+1, $dia+1);
$fecha2=sprintf("%04d-%02d-%02d", $ano, $mes+2, $dia+2);

echo "fecha = <b>".$fecha."</b><br/>" ;
echo "fecha1 = <b>".$fecha1."</b><br/>" ;
echo "fecha2 = <b>".$fecha2."</b><br/>==============<br/>" ;

if ($fecha1>=$fecha2)
{
echo "Fecha 1 mayor igual que Fecha 2";
}else{
echo "Fecha 1 menor igual que Fecha 2";
}
?>


Asi puedes medir por la variable $fecha o comparar por mes dia o año

dario_avila-244336

04/7/2012
funcion date()
Hola soy nuevo en php y estoy aprendiendo. Sucede que cuando uso la funcion date("h-i-s") al ejecutar el script no me da la hora de mi sistema sino adelantada en 2 hs. A que se debe? Muchas gracias.
FAQ relacionadas
Volver al árbol de categoríasVolver al árbol de categorías