Foros del Web » Programando para Internet » PHP »

Comparar fechas en PHP

Estas en el tema de Comparar fechas en PHP en el foro de PHP en Foros del Web. Hola a todos, os escribo pq quiero comparar 2 fechas, es decir sasber cual es mayor o menor. Aqui muestro el método que lo compara: ...
  #1 (permalink)  
Antiguo 15/04/2008, 10:10
 
Fecha de Ingreso: marzo-2008
Mensajes: 119
Antigüedad: 16 años, 1 mes
Puntos: 0
Pregunta Comparar fechas en PHP

Hola a todos,

os escribo pq quiero comparar 2 fechas, es decir sasber cual es mayor o menor.

Aqui muestro el método que lo compara:

Código PHP:
public function TutoriasValidasProfesor2()
    {
        if((
$this->tutoriasdesde<=date ('j/n/Y'))&&(date ('j/n/Y')<=$this->tutoriashasta))
        {
            
            echo
"Cierto, ".$this->tutoriasdesde." es menor que: ".date ('j/n/Y')." menor que: ".$this->tutoriashasta;
            return 
true;
            
            
        }
        else
        {
            echo
"Falso, ".$this->tutoriasdesde." es menor que: ".date ('j/n/Y')." menor que: ".$this->tutoriashasta;
            return 
false;
            
        }        
    } 
Todas las fechas tienen el mismo formato, pero en la segunda condición del if no lo hace bién, mientras que en la otra sí( o eso creo).
  #2 (permalink)  
Antiguo 15/04/2008, 12:37
 
Fecha de Ingreso: junio-2007
Ubicación: por ahi
Mensajes: 262
Antigüedad: 16 años, 9 meses
Puntos: 4
Re: Comparar fechas en PHP

Cuando estamos comparando fechas de la forma que lo estas haciendo realmente estas comparando cadenas de texto. La verdad determinar cual es mayor no es facil de esta forma.
Yo recomendaria que las conparaciones las hicieras siempre con numeros es decir que pasaras las fechas a tiempo unix (timestamp) con la funcion:

strtotime puedes hacerlo.

de esta forma ya no debes tener problemas en las comparaciones
__________________
Hernando Saenz Sanchez
  #3 (permalink)  
Antiguo 15/04/2008, 13:05
Avatar de .php  
Fecha de Ingreso: julio-2006
Mensajes: 481
Antigüedad: 17 años, 9 meses
Puntos: 5
Re: Comparar fechas en PHP

alomejor no es el caso, pero = lo mensiono.
si tus fechas vienen de una base de datos te recomiendo que lo compares con sql
__________________
~~[FiDeLio]~~
  #4 (permalink)  
Antiguo 16/04/2008, 01:45
 
Fecha de Ingreso: marzo-2008
Mensajes: 119
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Comparar fechas en PHP

Cita:
Iniciado por hernandos Ver Mensaje
Cuando estamos comparando fechas de la forma que lo estas haciendo realmente estas comparando cadenas de texto. La verdad determinar cual es mayor no es facil de esta forma.
Yo recomendaria que las conparaciones las hicieras siempre con numeros es decir que pasaras las fechas a tiempo unix (timestamp) con la funcion:

strtotime puedes hacerlo.

de esta forma ya no debes tener problemas en las comparaciones
Es decir que lo que propones es digamos que me cree una función que transforme las fehas a timestamp y las compare.

Vale, ya os diré como me ha ido.

Gracias.
  #5 (permalink)  
Antiguo 16/04/2008, 03:21
 
Fecha de Ingreso: marzo-2008
Mensajes: 119
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Comparar fechas en PHP

Hola de nuevo,

ya he encontrado una solución. He hecho un fichero que contiene dos ejemplos,que luego mostraré por si os sirve. Esta brevemente explicado.

Debido a que yo las fechas las pongo con el siguiente formato: dd/mm/yyyy, he creado una serie de funciones para transformar el formato, en el siguiente fichero (fechas.php):

Código PHP:
<?php

//Combierte fecha de MySql(Año-Mes-Dia) a normal(Dia-Mes-Año)
function cambiaf_a_normal($fecha)

    
ereg"([0-9]{2,4})-([0-9]{1,2})-([0-9]{1,2})"$fecha$mifecha); 
    
$lafecha=$mifecha[3]."/".$mifecha[2]."/".$mifecha[1]; 
    return 
$lafecha


//Convierte fecha de normal(Dia-Mes-Año) a MySql(Año-Mes-Dia) 

function cambiaf_a_mysql($fecha)

    
ereg"([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})"$fecha$mifecha); 
    
$lafecha=$mifecha[3]."-".$mifecha[2]."-".$mifecha[1]; 
    return 
$lafecha
}

//Convierte fecha con formato dd/mm/yyyy en dd-mm-yyyy, para poder utilizar la función strtotime y comparar fechas
function cambiaf_a_otrofor($fecha)
{
      
ereg"([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})"$fecha$mifecha); 
    
$lafecha=$mifecha[1]."-".$mifecha[2]."-".$mifecha[3]; 
    return 
$lafecha
}  
?>
Aquí los dos ejemplos en un fichero:

Código PHP:
<?php
require("Negocio/fechas.php");

/*Fecha actual con la función getdate() */
echo"Comparar dos fechas 1</br>";
$hoy=getdate();
echo
"Fecha de hoy: </br>";
echo
"Dia: ".$hoy["mday"]."</br>";
echo
"Mes: ".$hoy["mon"]."</br>";
echo
"Anio: ".$hoy["year"]."</br>";
echo
"</br>";
//Con este formato no hace falta cambio
$fecha=getdate(strtotime("17-04-2008"));
echo
"Fecha: </br>";
echo
"Dia: ".$fecha["mday"]."</br>";
echo
"Mes: ".$fecha["mon"]."</br>";
echo
"Anio: ".$fecha["year"]."</br>";
echo
"</br>";
//Transformarlas con mktime()
$hoy2=mktime(0,0,0,$hoy["mon"],$hoy["mday"],$hoy["year"]);
$fecha2=mktime(0,0,0,$fecha["mday"],$fecha["mon"],$fecha["year"]);
if(
$hoy2<=$fecha2)
{
    echo
"Hoy: ".$hoy["mday"]." ".$hoy["mon"]." ".$hoy["year"]." es menor o igual que"
    
.$fecha["mday"]." ".$fecha["mon"]." ".$fecha["year"]."</br>";
}
else
{
    echo
"Hoy: ".$hoy["mday"]." ".$hoy["mon"]." ".$hoy["year"]." es mayor que"
    
.$fecha["mday"]." ".$fecha["mon"]." ".$fecha["year"]."</br>";
}
echo
"</br>";
echo
"Comparar dos fechas 2</br>";
/*Fecha con formato dd/mm/yyyy la paso a formato dd-mm-yyyy con la función cambiaf_a_otrofor(), con strtotime la transformo en tiestamp
con getdate() obtengo el dia,mes y año, para luego utilizar la función mktime() y poder comparar fechas*/
$fecha22=getdate(strtotime(cambiaf_a_otrofor("21/07/2007")));
echo
"Fecha de hoy: </br>";
echo
"Dia: ".$fecha22["mday"]."</br>";
echo
"Mes: ".$fecha22["mon"]."</br>";
echo
"Anio: ".$fecha22["year"]."</br>";
echo
"</br>";
//Con este formato no hace falta cambio
$fecha33=getdate(strtotime(cambiaf_a_otrofor("01/02/2008")));
echo
"Fecha: </br>";
echo
"Dia: ".$fecha33["mday"]."</br>";
echo
"Mes: ".$fecha33["mon"]."</br>";
echo
"Anio: ".$fecha33["year"]."</br>";
echo
"</br>";
//Transformarlas con mktime()
$fechaRes22=mktime(0,0,0,$fecha22["mon"],$fecha22["mday"],$fecha22["year"]);
$fechaRes33=mktime(0,0,0,$fecha33["mday"],$fecha33["mon"],$fecha33["year"]);
if(
$fechaRes22<=$fechaRes33)
{
    echo
"Fecha: ".$fecha22["mday"]." ".$fecha22["mon"]." ".$fecha22["year"]." es menor o igual que "
    
.$fecha33["mday"]." ".$fecha33["mon"]." ".$fecha33["year"]."</br>";
}
else
{
    echo
"Fecha: ".$fecha22["mday"]." ".$fecha22["mon"]." ".$fecha22["year"]." es mayor que "
    
.$fecha33["mday"]." ".$fecha33["mon"]." ".$fecha33["year"]."</br>";
}

?>
Espero que os sirva, y si encontrais algún fallo, por favor decirmelo.
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 09:03.