Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] comparar fechas (ayer, hoy, manana)

Estas en el tema de comparar fechas (ayer, hoy, manana) en el foro de PHP en Foros del Web. Hola a todos, espero me puedan ayudar, tengo un problema con las fechas al momento de determinar si son anteriores a hoy, hoy y despues ...
  #1 (permalink)  
Antiguo 02/11/2017, 12:46
 
Fecha de Ingreso: enero-2011
Mensajes: 24
Antigüedad: 13 años, 3 meses
Puntos: 0
comparar fechas (ayer, hoy, manana)

Hola a todos, espero me puedan ayudar, tengo un problema con las fechas al momento de determinar si son anteriores a hoy, hoy y despues de hoy.

Practicamente, funciona en los casos de que las fechas en input al compararla con la fecha actual, no supere de dia (numero de dia), por ejemplo con los siguientes INPUT funciona correctamente.

teniendio en cuenta que hoy es igual a hoy = 02-11-2017


con input = 01/11/2017 retorna "anterior a hoy" que es correcto
con input = 02/11/2017 retorna "hoy" que es correcto
con input = 03/11/2017 retorna "despues de hoy" que es correcto
con input = 01/10/2017 anterior a hoy //correcto
con input = 02/10/2017 retorna "anterior a hoy" que es correcto

mientras que con el INPUT input = 03/10/2017 (tres de octubre)

retorna "despues de hoy" que es incorrecto ya que el "03/10/2017" como fecha es inferior al "02/11/2017", ese es el error que no logro corregir.

es decir, funciona casi todo, menos cuando el dia en INPUT (solo el dia) supera al dia definido en la variable hoy = 02-11-2017

Código PHP:
//$input = "01/11/2017"; //anterior a hoy //correcto
//$input = "02/11/2017"; //hoy //correcto
//$input = "03/11/2017"; //despues de hoy //correcto
//$input = "01/10/2017"; //anterior a hoy //correcto
//$input = "02/10/2017"; //anterior a hoy //correcto
$input "03/10/2017";  //despues de hoy //incorrecto

//$hoy = date("d-m-Y");
$hoy date("02-11-2017");

$input str_replace('/''-'$input);
$input date('d-m-Y'strtotime($input));

echo 
"INPUT: " $input "<br> HOY: " $hoy;

    if (
$input $hoy) { 
        
$cssclass "anterior a hoy";
    } else if (
$input == $hoy) { 
        
$cssclass "hoy";
    } else if (
$input $hoy) { 
        
$cssclass "despues de hoy";
    }  else {
        
$cssclass "nada de nada";
    }

    echo 
"<br><br> Resultado: " .$cssclass
con INPUT 01/11/2017 anterior a hoy //correcto

Código:
INPUT: 01-11-2017
HOY: 02-11-2017

Resultado: anterior a hoy
con input 02/11/2017 retorna hoy //correcto

Código:
INPUT: 02-11-2017
HOY: 02-11-2017

Resultado: hoy
con input 03/11/2017 despues de hoy //correcto

Código:
INPUT: 03-11-2017
HOY: 02-11-2017

Resultado: despues de hoy
con input 01/10/2017 anterior a hoy //correcto
1 de ocutbre, dia inferior a 2 y con diferente mes.

Código:
INPUT: 01-10-2017
HOY: 02-11-2017

Resultado: anterior a hoy

con input 02/10/2017 anterior a hoy //correcto
2 de ocutbre, mismo dia con diferente mes.

Código:
INPUT: 02-10-2017
HOY: 02-11-2017

Resultado: anterior a hoy
y este ultimo es donde da error

con input 03/10/2017 //despues de hoy //incorrecto

Código:
INPUT: 03-10-2017
HOY: 02-11-2017

Resultado: despues de hoy
que es incorrecto ya que el "03/10/2017" como fecha es inferior al "02/11/2017"

alguna sugerencia?

gracias anticipadas.

salud2

Última edición por italo_pm; 02/11/2017 a las 12:56
  #2 (permalink)  
Antiguo 02/11/2017, 14:26
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: comparar fechas (ayer, hoy, manana)

Tanto hoy como a input tienes que darle strtotime.

Código PHP:
Ver original
  1. $now = strtotime(date("d-m-Y"));
  2. $input = strtotime(str_replace("/", "-", $input));

Con eso debería esta bien
  #3 (permalink)  
Antiguo 02/11/2017, 17:24
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: comparar fechas (ayer, hoy, manana)

tan sencillo como crear una función:
Código PHP:
Ver original
  1. function compare_with_today($date, $format= 'd/m/Y') {
  2.    
  3.     $today = new DateTime();
  4.    
  5.     $date = DateTime::createFromFormat($format, $date);
  6.    
  7.     if ($today > $date) {
  8.         return "anterior a hoy";
  9.     }
  10.    
  11.     if ($today < $date) {
  12.         return "despues de hoy";
  13.     }
  14.    
  15.     return 'hoy';
  16. }
  17.  
  18. echo compare_with_today('02/11/2017');
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #4 (permalink)  
Antiguo 04/11/2017, 10:20
 
Fecha de Ingreso: enero-2011
Mensajes: 24
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: comparar fechas (ayer, hoy, manana)

Cita:
Iniciado por alvaro_trewhela Ver Mensaje
Tanto hoy como a input tienes que darle strtotime.

Código PHP:
Ver original
  1. $now = strtotime(date("d-m-Y"));
  2. $input = strtotime(str_replace("/", "-", $input));

Con eso debería esta bien
muchas gracias @alvaro_trewhela, pense que con solo "date" bastava, muchas gracias funciona correctamente.


@hhs gracias por tu sugerencia, aun no empleo mucho el uso del funciones, soy autodidacta con php, se que debo de usarlas, lo hare porque me he dado cuenta que repito muchos codigo que hace casi lo mismo, gracias nuevamente.
  #5 (permalink)  
Antiguo 04/11/2017, 10:51
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: comparar fechas (ayer, hoy, manana)

Me sumo a hss y como tu dices, lo mejor es usar funciones, te recomiendo que aprendas eso es indispensable, son muy utiles, practicas, si las usas bien limpian tu código y son reutilizables.

Etiquetas: variable
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 01:07.