Foros del Web » Programando para Internet » PHP »

como hago para comparar fechas

Estas en el tema de como hago para comparar fechas en el foro de PHP en Foros del Web. tengo asi if($fecha_1< $fecha_2) { entra aki } else { la fecha de plazo debe ser mayor a la fecha de entrga } el problema ...
  #1 (permalink)  
Antiguo 04/11/2008, 18:12
Avatar de petoko  
Fecha de Ingreso: noviembre-2007
Ubicación: talcahuano chile
Mensajes: 173
Antigüedad: 16 años, 4 meses
Puntos: 0
como hago para comparar fechas

tengo asi

if($fecha_1< $fecha_2)
{
entra aki
}
else
{

la fecha de plazo debe ser mayor a la fecha de entrga
}

el problema es que si pongo como valor en la fecha 1 2008-11-04 y en fecha 2 2008-11-06 entra en el if

pero si pongo fecha 1 2008-11-04 y en la fecha 2 pongo 2008-11-12

me entra en el else


como lo puedo hacer para que la comparacion sea 100% efectiva y correcta?
  #2 (permalink)  
Antiguo 04/11/2008, 18:31
 
Fecha de Ingreso: septiembre-2008
Mensajes: 242
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: como hago para comparar fechas

Cita:
Iniciado por petoko Ver Mensaje
tengo asi

if($fecha_1< $fecha_2)
{
entra aki
}
else
{

la fecha de plazo debe ser mayor a la fecha de entrga
}

el problema es que si pongo como valor en la fecha 1 2008-11-04 y en fecha 2 2008-11-06 entra en el if

pero si pongo fecha 1 2008-11-04 y en la fecha 2 pongo 2008-11-12

me entra en el else


como lo puedo hacer para que la comparacion sea 100% efectiva y correcta?
podrias dejarlo en total de dias:

2008*365+11*X+04*1

donde x es un systema para saber si es un mes de 31 30 o 28 dias:

que podria ser asi:

if(mes = 2)
{
x = 28; /febrero
}
else
{
$mes1 = $mes%2; //para saber si es par o impar los impares tienen 31 los pares 30
if(mes1 = 0)
{
x = 30;
}
else
{
x = 31;
}
}

espero que te sirva, haces eso con las 2 fechas y deberia salir...
  #3 (permalink)  
Antiguo 04/11/2008, 19:01
Avatar de petoko  
Fecha de Ingreso: noviembre-2007
Ubicación: talcahuano chile
Mensajes: 173
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: como hago para comparar fechas

el es que las fechas las obtengo de mi base de datos por lo tanto solo obtengo las fechas en este formato año-mes dia
para eso tendira que separarla? como hago eso?
  #4 (permalink)  
Antiguo 04/11/2008, 19:17
Avatar de eZakto  
Fecha de Ingreso: julio-2008
Mensajes: 214
Antigüedad: 15 años, 8 meses
Puntos: 5
Respuesta: como hago para comparar fechas

Puedes transformar las fechas en timestamps y compararlas.

Lo que no sé es como puedes pasar una fecha tipo "YYYY-MM-DD" a timestamp...

Podrías separarlas por "-" con explode, luego a la del mes reemplazarla por el nombre del mes en inglés (por ejemplo, si es 11 reemplazarlo por November) y armar una cadena tipo "04 september 2008" y obtener el timestamp con strtotime.

Saludos.
  #5 (permalink)  
Antiguo 04/11/2008, 19:22
Avatar de petoko  
Fecha de Ingreso: noviembre-2007
Ubicación: talcahuano chile
Mensajes: 173
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: como hago para comparar fechas

hay alguna otra sugerencia?
  #6 (permalink)  
Antiguo 04/11/2008, 19:49
Avatar de bacdavi  
Fecha de Ingreso: junio-2006
Ubicación: http://localhost/
Mensajes: 351
Antigüedad: 17 años, 9 meses
Puntos: 7
Respuesta: como hago para comparar fechas

hey a ver si te furula este:

Código PHP:

<?php $fechaInicio ="28/02/1999";  
$fechaActual "29/02/2000";  
$diaActual substr($fechaActual02);  
$mesActual substr($fechaActual35);  
$anioActual substr($fechaActual610);  
$diaInicio substr($fechaInicio02);  
$mesInicio substr($fechaInicio35);  
$anioInicio substr($fechaInicio610);  
$b 0;  
$mes $mesInicio-1;  
if(
$mes==2){  
if((
$anioActual%4==&& $anioActual%100!=0) || $anioActual%400==0){  
$b 29;  
}else{  
$b 28;  
}  
}  
else if(
$mes<=7){  
if(
$mes==0){  
$b 31;  
}  
else if(
$mes%2==0){  
$b 30;  
}  
else{  
$b 31;  
}  
}  
else if(
$mes>7){  
if(
$mes%2==0){  
$b 31;  
}  
else{  
$b 30;  
}  
}  
if((
$anioInicio>$anioActual) || ($anioInicio==$anioActual && $mesInicio>$mesActual) ||   
(
$anioInicio==$anioActual && $mesInicio == $mesActual && $diaInicio>$diaActual)){  
echo 
"La fecha de inicio ha de ser anterior a la fecha Actual";  
}else{  
if(
$mesInicio <= $mesActual){  
$anios $anioActual $anioInicio;  
if(
$diaInicio <= $diaActual){  
$meses $mesActual $mesInicio;  
$dies $diaActual $diaInicio;  
}else{  
if(
$mesActual == $mesInicio){  
$anios $anios 1;  
}  
$meses = ($mesActual $mesInicio 12) % 12;  
$dies $b-($diaInicio-$diaActual);  
}  
}else{  
$anios $anioActual $anioInicio 1;  
if(
$diaInicio $diaActual){  
$meses $mesActual $mesInicio -+12;  
$dies $b - ($diaInicio-$diaActual);  
}else{  
$meses $mesActual $mesInicio 12;  
$dies $diaActual $diaInicio;  
}  
}  
echo 
"Años: ".$anios." <br />";  
echo 
"Meses: ".$meses." <br />";  
echo 
"Días: ".$dies." <br />";  
}
?>
  #7 (permalink)  
Antiguo 04/11/2008, 20:10
 
Fecha de Ingreso: septiembre-2008
Mensajes: 242
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: como hago para comparar fechas

Cita:
Iniciado por petoko Ver Mensaje
el es que las fechas las obtengo de mi base de datos por lo tanto solo obtengo las fechas en este formato año-mes dia
para eso tendira que separarla? como hago eso?
lo que te dije anterior mente, pero haces esto:

$fecha_a = 2004-11-08;

$año = substr($fecha, 6);
$mes = substr(str_replace(''.$año.'-', "", $fecha), 4);
$dia = substr($fecha, -2);

if($mes = 2)
{
$x = 28; //febrero
}
else
{
$mes1 = $mes%2; //para saber si es par o impar los impares tienen 31 los pares 30
if($mes1 = 0)
{
$x = 30;
}
else
{
$x = 31;
}
}


$fecha = $año*365+$mes*$x+$dia*1;

y hazes lo mismo para la otra, es una forma, no muy ortodoxa pero bien logica... no digo que sea la mejor...
  #8 (permalink)  
Antiguo 05/11/2008, 19:51
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 5 meses
Puntos: 8
Respuesta: como hago para comparar fechas

Cita:
Iniciado por petoko Ver Mensaje
hay alguna otra sugerencia?
Lo que yo hago es justamente lo que ha comentado eZakto: descomponer con explode la fecha recuperada desde la bb.dd. en MySQL (con el formato aaaa-mm-dd) y pasarla a marcas de tiempo (segundos desde 1-1-1970 0:00h). El código en concreto es éste:

Código php:
Ver original
  1. <?php
  2.  
  3.     function f2n( $fecha ) {
  4.         $f = explode( "-", $fecha );
  5.         $n = mktime( 0, 0, 0, $f[1], $f[2], $f[0], 0 );
  6.        
  7.         return $n;
  8.     }
  9. ?>

De esa manera, las comparaciones y otras operaciones (diferencias, etc) son inmediatas. Además, representar los valores retornados de nuevo en formato legible es inmediato usando date() con el parámetro de formato apropiado.

Un saludo.

Última edición por Deschamps; 05/11/2008 a las 19:56
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 10:19.