Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] error al comparar fechas

Estas en el tema de error al comparar fechas en el foro de PHP en Foros del Web. Hola tengo una tabla con los siguientes campos Id...Mes...Monto...DiaVence... 1....Enero..3000....1......... 2..Febrero..3000....1......... Ahora estoy intentando comparar fechas primero tomo mi fecha actual y la separo en ...
  #1 (permalink)  
Antiguo 31/01/2014, 16:25
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 10 meses
Puntos: 12
Exclamación error al comparar fechas

Hola tengo una tabla con los siguientes campos
Id...Mes...Monto...DiaVence...
1....Enero..3000....1.........
2..Febrero..3000....1.........

Ahora estoy intentando comparar fechas primero tomo mi fecha actual y la separo en dia, mes y año....
y de una consulta tomo mi mes y mi dia vence...

Si se preguntan porque no manejo fechas desde el inicio es porque inserto varios meses ... (en un input inserto dia vence y con un check selecciono mis meses osea el llenado se realiza una sola vez)...

Bien hice esto y en el código comento mis resultados esperando me puedan ayudar.... Gracias de antemano :)

Código PHP:
$fechaactual=date('d/m/y');
echo 
$fechaactual;
echo 
"<br>";
     
$dia substr ("$fechaactual"02); 
    
$mes substr ("$fechaactual"3, -3); 
    
$yysubstr ("$fechaactual"62); 
    
$mv=$row_consulta['Mes']; 
    echo 
$mv;
    if (
$mv='Enero')
    {
   
$mv2='01';
...
  }
    
    
$dv=$row_consulta['DiaVence']; 
    echo 
$dv;

    
//$fechavence=$dv.'/'.$mv2.'/'.$yy;
    
$fechavence='01/02/14';//PROBANDO
    
echo "<br>";
    echo 
$fechavence;
    echo 
"<br>";
 if (
$fechaactual>$fechavence)
    {
    echo 
"Aplica cargo";
  }
    else
    {
    echo 
"Sin recargo";
  }
    
//ACA TENGO UN ERROR AL PONER $fechavence='01/02/14';
//ARROJA APLICAR CARGO...
//CUANDO 31/01/04 SI ES MAYOR QUE 01/02/14 ASI Q DEBERIA SER NO APLICA RECARGO

//PRUEBA DOS
//COMPARO DIA Y MES Y TODO HABIA SALIDO BIEN EL ERROR DE ARRIBA //NO SE DABA YA QUE MOSTRABA APLICAR RECARGO... PERO AL PONER 
//$fechavence='01/01/14';  muestra sin cargo... cuando deberia //aplicar 

    
if ($dia&&$mes>$dv&&$mv2)
    {
    echo 
"Comparacion 2 Aplica cargo";
  }
    else
    {
    echo 
"Comparacion 2 Sin recargo";
  }
 
?> 
  #2 (permalink)  
Antiguo 31/01/2014, 16:46
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 10 meses
Puntos: 12
Respuesta: error al comparar fechas

Con la primera comparación tengo errores si el mes es diferente al actual es decir diferente a 1...
ejemplo si pongo 01/05/14

marca Aplica cargo...

con la segunda comparacion tengo error si el mes es el mismo al actual es decir 1 (por ahora)
ejemplo si tengo 20/01/14
me arroja
Comparacion 2Sin recargo....

  #3 (permalink)  
Antiguo 31/01/2014, 16:55
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: error al comparar fechas

No estás comparando fechas, sino cadenas, revisa esta respuesta: http://www.forosdelweb.com/f18/compa...7/#post4415183
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 31/01/2014, 17:04
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 10 meses
Puntos: 12
Respuesta: error al comparar fechas

Cita:
Iniciado por Triby Ver Mensaje
No estás comparando fechas, sino cadenas, revisa esta respuesta: http://www.forosdelweb.com/f18/compa...7/#post4415183
Gracias Triby
lo deje asi
if (strtotime($fechaactual)>strtotime($fechavence))
{
echo "Aplica cargo";
}
else
{
echo "Sin recargo";
}

Ahora si pongo 01/02/14 como fecha vence marca lo correcto osea sin cargo... pero si pongo
21/01/14 como fecha vence me marca sin recargos.... cuando deberia mandarme aplica....
  #5 (permalink)  
Antiguo 31/01/2014, 17:06
 
Fecha de Ingreso: abril-2009
Ubicación: en un lugar de la mancha
Mensajes: 236
Antigüedad: 15 años
Puntos: 38
Respuesta: error al comparar fechas

Recuerda que comparas fechas no texto ni numeros espero esto te ayude. He tratado de organizarte un poco tu codigo.

Código PHP:

$fechaActual 
date('d/m/y'); 

echo 
$fechaActual ' <br />; 

$dia   = date('
d');  
$mes = date('
n');  
$yy    = date('
y');  
$mv   = $row_consulta['
Mes'];  
$mv2 = date('
n', strtotime($mv));
$dv    = $row_consulta['
DiaVence'];  
echo $dv . '
<br />; 

$fechaVence = new DateTime('01/02/14'); // PROBANDO 

echo date_format($fechaVence'd-m-y') . '<br />'
 
echo 
$fechaactual $fechavence 'Aplica Cargo' 'Sin Recargo'

echo 
$mes $dv 'Comparacion 2 Aplica cargo' 'Comparacion 2 Sin recargo' 
  #6 (permalink)  
Antiguo 31/01/2014, 17:07
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: error al comparar fechas

Intenta colocando el año con los 4 dígitos.
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 31/01/2014, 18:16
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 10 meses
Puntos: 12
Cita:
Iniciado por Triby Ver Mensaje
Intenta colocando el año con los 4 dígitos.
sigue sin funcionar triby

Cita:
Iniciado por rolygc Ver Mensaje
Recuerda que comparas fechas no texto ni numeros espero esto te ayude. He tratado de organizarte un poco tu codigo.

Código PHP:

$fechaActual 
date('d/m/y'); 

echo 
$fechaActual ' <br />; 

$dia   = date('
d');  
$mes = date('
n');  
$yy    = date('
y');  
$mv   = $row_consulta['
Mes'];  
$mv2 = date('
n', strtotime($mv));
$dv    = $row_consulta['
DiaVence'];  
echo $dv . '
<br />; 

$fechaVence = new DateTime('01/02/14'); // PROBANDO 

echo date_format($fechaVence'd-m-y') . '<br />'
 
echo 
$fechaactual $fechavence 'Aplica Cargo' 'Sin Recargo'

echo 
$mes $dv 'Comparacion 2 Aplica cargo' 'Comparacion 2 Sin recargo' 

Gracias amigo lo probe pero con esta $fechaVence = new DateTime('01/01/14'); // PROBANDO

esto me arrojo Sin Recargo (esta mal si hay regargo)---Comparacion 2 Aplica cargo(bien)

y asi $fechaVence = new DateTime('01/02/14'); // PROBANDO

Sin Recargo (bien)---Comparacion 2 Aplica cargo (aqui esta mal no hay recargo)

otra cosa porque esto $fechaVence = new DateTime('01/03/14'); // PROBANDO

echo date_format($fechaVence, 'd-m-y') . '<br />';

en el echo muestra
03-01-14 ---- deberia ser 01-03-14

Última edición por Triby; 31/01/2014 a las 19:15 Razón: Combinar mensajes seguidos
  #8 (permalink)  
Antiguo 31/01/2014, 19:22
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: error al comparar fechas

Tienes ya una advertencia por publicar mensajes consecutivos e insistes con ello; recuerda que puedes editar si no hay respuestas posteriores.

Resulta que el formato por default para las fechas en PHP podría ser mm-dd-aaaa, por eso cuando convierto fechas con strtotime lo hago con formato aaaa-mm-dd, sería tan fácil como probar:

Código PHP:
Ver original
  1. $hoy = strtotime('2014/01/31');
  2. $vence = strtotime('2014/01/20);
  3.  
  4. if($hoy > $vence) {
  5.     // Con recargo
  6. } else {
  7.     // Sin recargo
  8. }
__________________
- León, Guanajuato
- GV-Foto
  #9 (permalink)  
Antiguo 04/02/2014, 12:16
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 10 meses
Puntos: 12
Cita:
Iniciado por Triby Ver Mensaje
Tienes ya una advertencia por publicar mensajes consecutivos e insistes con ello; recuerda que puedes editar si no hay respuestas posteriores.

Resulta que el formato por default para las fechas en PHP podría ser mm-dd-aaaa, por eso cuando convierto fechas con strtotime lo hago con formato aaaa-mm-dd, sería tan fácil como probar:

Código PHP:
Ver original
  1. $hoy = strtotime('2014/01/31');
  2. $vence = strtotime('2014/01/20);
  3.  
  4. if($hoy > $vence) {
  5.     // Con recargo
  6. } else {
  7.     // Sin recargo
  8. }
Gracias Triby asi no hay problema ... tengo dudas aca...
$hoy = strtotime('2014/01/31');
tiene un valor dado pero si necesito sacarlo de una variable
intente hacerlo asi
echo $hoy7 = date("Y-m-d");
$hoy = strtotime('$hoy7');

Pero no tengo los resultados correctos...

lo puse asi

Código PHP:
$hoy strtotime (date("y-m-d")); 
no hay error en hacerlo asi???
y mi fecha vence la obtengo de una consulta (solo el dia y el mes por separado)
$mv = $row_consulta['Mes'];
$dv = $row_consulta['Dia'];
$fechavence=$dv.'/'.$mv2.'/'.$yy;

aca no sé como meter

strtotime

Última edición por Triby; 04/02/2014 a las 18:03 Razón: Combinar mensajes seguidos
  #10 (permalink)  
Antiguo 04/02/2014, 16:11
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: error al comparar fechas

Cita:
Iniciado por Briss Ver Mensaje
lo puse asi

Código PHP:
$hoy strtotime (date("y-m-d")); 
no hay error en hacerlo asi???
y mi fecha vence la obtengo de una consulta (solo el dia y el mes por separado)
$mv = $row_consulta['Mes'];
$dv = $row_consulta['Dia'];
$fechavence=$dv.'/'.$mv2.'/'.$yy;

aca no sé como meter

strtotime
Pues para eso es la documentación para saber como usar las funciones que proporciona php:
http://www.php.net/manual/en/function.strtotime.php
Código PHP:
Ver original
  1. $fechavence="{$dv}-{$mv2}-{$yy}";
  2. $fecha_vence = strtotime($fechavence);
La razon por la que cambien tus '/' en la fecha es por la siguiente nota en el manual:
Cita:
Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed.
To avoid potential ambiguity, it's best to use ISO 8601 (YYYY-MM-DD) dates or DateTime::createFromFormat() when possible.
Para evitar ambiguedad al usar / en el formato
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #11 (permalink)  
Antiguo 04/02/2014, 17:41
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 10 meses
Puntos: 12
Respuesta: error al comparar fechas

Gracias :)

Etiquetas: fecha, tabla
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 22:50.