Foros del Web » Programando para Internet » PHP »

comparar fechas

Estas en el tema de comparar fechas en el foro de PHP en Foros del Web. hola amigos tengo un problemilla con las fechas tengo este escript que compara que fechas es mayor menor o igual. el problema es que veo ...
  #1 (permalink)  
Antiguo 07/04/2005, 22:47
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Pregunta comparar fechas

hola amigos tengo un problemilla con las
fechas tengo este escript que compara
que fechas es mayor menor o igual.

el problema es que veo que solo funciona
con el formato dd/mm/yyyy

y en una tabla registro la fechas
en formato yyyy-mm-d
y en esta funcion no trabaja
asi puede decirme alguien
que debo hacer saber si por ejemplo la fecha del sistema es
2005-04-7 es mayor a la fecha registrada en tabla digamos 2005-04-6




<?
function compara_fechas($fecha1,$fecha2)
{
if (preg_match("/[0-9]{1,2}\/[0-9]{1,2}\/([0-9][0-9]){1,2}/",$fecha1))
list($dia1,$mes1,$año1)=split("/",$fecha1);
if (preg_match("/[0-9]{1,2}-[0-9]{1,2}-([0-9][0-9]){1,2}/",$fecha1))
list($dia1,$mes1,$año1)=split("-",$fecha1);

if (preg_match("/[0-9]{1,2}\/[0-9]{1,2}\/([0-9][0-9]){1,2}/",$fecha2))
list($dia2,$mes2,$año2)=split("/",$fecha2);
if (preg_match("/[0-9]{1,2}-[0-9]{1,2}-([0-9][0-9]){1,2}/",$fecha2))
list($dia2,$mes2,$año2)=split("-",$fecha2);

$dif = mktime(0,0,0,$mes1,$dia1,$año1) - mktime(0,0,0, $mes2,$dia2,$año2);

return ($dif);
}


$f1="7/04/2005";

$f2="6/04/2005";

if (compara_fechas($f1,$f2)<0)
echo "$f1 es menor que $f2 <br>";

if (compara_fechas($f1,$f2)>0)
{
echo "$f1 es mayor que $f2 <br>";
}

if (compara_fechas($f1,$f2)==0)
echo "$f1 es igual que $f2 <br>";


?>
__________________
gerardo

Última edición por chalchis; 07/04/2005 a las 22:49
  #2 (permalink)  
Antiguo 07/04/2005, 23:39
 
Fecha de Ingreso: enero-2004
Ubicación: Salto
Mensajes: 484
Antigüedad: 20 años, 3 meses
Puntos: 2
Código PHP:
<?
function compara_fechas($fecha1,$fecha2)
{
if (
preg_match("/([0-9][0-9]){1,2}/\[0-9]{1,2}\/[0-9]{1,2}/",$fecha1))
list(
$año1,$mes1,$dia1)=split("/",$fecha1);
if (
preg_match("/([0-9][0-9]){1,2}-[0-9]{1,2}-[0-9]{1,2}/",$fecha1))
list(
$año1,$mes1,$dia1)=split("-",$fecha1);
if (
preg_match("/([0-9][0-9]){1,2}/\[0-9]{1,2}\/[0-9]{1,2}/",$fecha2))
list(
$año2,$mes2,$dia2)=split("/",$fecha2);
if (
preg_match("/([0-9][0-9]){1,2}-[0-9]{1,2}-[0-9]{1,2}/",$fecha2))
list(
$año2,$mes2,$dia2)=split("-",$fecha2);
$dif mktime(0,0,0,$año1,$mes1,$dia1) - mktime(0,0,0,$año2,$mes2,$dia2);
return (
$dif); 
}
$f1="2005-04-7";
$f2="2005-04-6";
if (
compara_fechas($f1,$f2)<0)
echo 
"$f1 es menor que $f2 <br>";
if (
compara_fechas($f1,$f2)>0)
{
echo 
"$f1 es mayor que $f2 <br>";
}
if (
compara_fechas($f1,$f2)==0)
echo 
"$f1 es igual que $f2 <br>";
?>
Prueba así, no se mucho de expresiones regulares, solo di vuelta el script
saludos
__________________
Dios dira que esto no es justo, pero lo sera...
  #3 (permalink)  
Antiguo 08/04/2005, 00:15
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
no funciono

Hola sebtev gracias por contestar
pero no esta haciendo la comparacion
probe con los valores

$f1="2005-04-7";
$f2="2005-04-6";

y pues dicen que son iguales y f1 deberia ser mayor
esta funciono la encontres para comparar fechas

no se si haya otra forma.

Gracias esperos sus comentarios
__________________
gerardo
  #4 (permalink)  
Antiguo 08/04/2005, 01:38
Avatar de kesthers  
Fecha de Ingreso: mayo-2004
Ubicación: Valencia
Mensajes: 358
Antigüedad: 19 años, 11 meses
Puntos: 2
Por que no transformas esas fechas a timestamp?
Yo ho hago así y funciona muy bien

Si dices que sale directamente de la base de datos así primero hay que convertirlo

Código PHP:
<?
$f1
="2005-04-7";
$f2="2005-04-6";
$f1_array explode("-" $f1); //de esta forma consigues separ dia de mes de año
$f2_array explode("-" $f2); //de esta forma consigues separ dia de mes de año
$f1 mktime(000$f1_array[1], $f1_array[2], $f1_array[0]);
$f2 mktime(000$f2_array[1], $f2_array[2], $f2_array[0]);

$resultado $f1-$f2;

//Ahora simplemente aplicas un if
if($resultado==0) {
    echo 
"La fecha es igual";
}

if(
$resultado>0) {
    echo 
"La fecha 1 es mayor";
}

if(
$resultado<0) {
    echo 
"La fecha 2 es mayor";
}
?>
El ejemplo es muy simple, pero funciona.
Si te interesa usarlo así simplemente tienes que modificarlo a tu gusto

si vas a usar esta forma te recomiendo (si tienes la posibilidad) que los datos en la BDD los metas directamente en timestamp


Besos
  #5 (permalink)  
Antiguo 08/04/2005, 09:16
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Pregunta Gracias Corazon

Cita:
Iniciado por kesthers
Por que no transformas esas fechas a timestamp?
Yo ho hago así y funciona muy bien

Si dices que sale directamente de la base de datos así primero hay que convertirlo

Código PHP:
<?
$f1
="2005-04-7";
$f2="2005-04-6";
$f1_array explode("-" $f1); //de esta forma consigues separ dia de mes de año
$f2_array explode("-" $f2); //de esta forma consigues separ dia de mes de año
$f1 mktime(000$f1_array[1], $f1_array[2], $f1_array[0]);
$f2 mktime(000$f2_array[1], $f2_array[2], $f2_array[0]);

$resultado $f1-$f2;

//Ahora simplemente aplicas un if
if($resultado==0) {
    echo 
"La fecha es igual";
}

if(
$resultado>0) {
    echo 
"La fecha 1 es mayor";
}

if(
$resultado<0) {
    echo 
"La fecha 2 es mayor";
}
?>
El ejemplo es muy simple, pero funciona.
Si te interesa usarlo así simplemente tienes que modificarlo a tu gusto

si vas a usar esta forma te recomiendo (si tienes la posibilidad) que los datos en la BDD los metas directamente en timestamp


Besos
Me sirvio mucho el script
__________________
gerardo
  #6 (permalink)  
Antiguo 28/04/2005, 07:13
Avatar de alexis77  
Fecha de Ingreso: diciembre-2003
Mensajes: 119
Antigüedad: 20 años, 4 meses
Puntos: 0
y que pasa si quiero imprimir esas fechas con el formato de fecha como tal como transformo claro utilizando el script kesthers

finio 2005-07-02
ffinal 2005-07-02
  #7 (permalink)  
Antiguo 28/04/2005, 07:30
Avatar de kesthers  
Fecha de Ingreso: mayo-2004
Ubicación: Valencia
Mensajes: 358
Antigüedad: 19 años, 11 meses
Puntos: 2
Para pasarlo a formato de fecha normal hay que usar la función date()
Ejemplo:
Código PHP:
echo date("d/m/Y"$f1); 
Utilizando la funcion date() podras conseguir le fecha en el formato que desees, la hora en que se publico la noticia...

Saludos
  #8 (permalink)  
Antiguo 28/04/2005, 08:10
Avatar de alexis77  
Fecha de Ingreso: diciembre-2003
Mensajes: 119
Antigüedad: 20 años, 4 meses
Puntos: 0
Justo en eso estaba trabajando pero no funciona


fecha 20050428

$f = "20050428";
echo date("Y-m-d",$f);


1969-12-31
1970-08-20

asi para con los demas tambien y no se como solucionar
  #9 (permalink)  
Antiguo 12/11/2007, 15:41
 
Fecha de Ingreso: diciembre-2003
Mensajes: 173
Antigüedad: 20 años, 4 meses
Puntos: 1
Re: comparar fechas

Hola,

para obtener el mismo resultado pero con horas? como se podria hacer.
  #10 (permalink)  
Antiguo 12/11/2007, 16:01
Avatar de kesthers  
Fecha de Ingreso: mayo-2004
Ubicación: Valencia
Mensajes: 358
Antigüedad: 19 años, 11 meses
Puntos: 2
Re: comparar fechas

Código:
echo date("d/m/Y H:i", $f1);
Más info en: http://es.php.net/manual/es/function.date.php
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:51.