Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP OO Problemas para trabajar con fechas en PHP

Estas en el tema de Problemas para trabajar con fechas en PHP en el foro de PHP en Foros del Web. Hola, Intentare explicar mi problema lo mejor posible: estoy desarrollando una aplicación para un gimnasio con PHP y lo que necesito es tomar el campo ...
  #1 (permalink)  
Antiguo 07/07/2015, 13:32
 
Fecha de Ingreso: julio-2015
Mensajes: 11
Antigüedad: 9 años, 4 meses
Puntos: 0
Problemas para trabajar con fechas en PHP

Hola,

Intentare explicar mi problema lo mejor posible: estoy desarrollando una aplicación para un gimnasio con PHP y lo que necesito es tomar el campo de "fecha de ingreso" (la fecha en la que se inscribió y/o pago la mensualidad el cliente) y compararla con la fecha actual, de modo que si ya cumplió los 30 días de la mensualidad, en la pantalla se muestre una notificación tipo "convenio terminado",

Actualmente mi código es el sgte,

<?php
$con = mysqli_connect('localhost', 'root', '', 'gimnasio');
$id=$_POST["id"];
$rut=$_POST["rut"];
$link="select Fecha_ingreso from `gym` WHERE id='$id' or rut='$rut'";
$result = mysqli_query($con, $link);

while ($registro = mysqli_fetch_array($result)){

if(strtotime($registro)+strtotime('30 day')<time())
{
echo "convenio vigente";
}else{
{ echo "convenio terminado";}

}
}
?>

Espero que puedan ayudarme con mi duda, y muchas gracias por su aporte
  #2 (permalink)  
Antiguo 07/07/2015, 13:40
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Problemas para trabajar con fechas en PHP

¿Y el "problema" exactamente cual es?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 07/07/2015, 13:42
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 9 meses
Puntos: 69
Respuesta: Problemas para trabajar con fechas en PHP

Utiliza date_diff para hacer eso:

Código PHP:
Ver original
  1. <?php
  2. $datetime1 = date_create('2009-10-11');
  3. $datetime2 = date_create('2009-10-13');
  4. $interval = date_diff($datetime1, $datetime2);
  5. echo $interval->format('%R%a días');
  6. ?>

Para más información: http://php.net/manual/es/datetime.diff.php
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #4 (permalink)  
Antiguo 07/07/2015, 13:42
 
Fecha de Ingreso: julio-2015
Mensajes: 11
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Problemas para trabajar con fechas en PHP

Cita:
Iniciado por pateketrueke Ver Mensaje
¿Y el "problema" exactamente cual es?
jajajaj disculpa se me olvido copiar el resto del word...

Resulta que, en base al código que postee, al hacer la consulta por el cliente me aparece el sgte error:

Warning: strtotime() expects parameter 1 to be string, object given in "..\encuentra_datos_cliente.php" on line 91...
  #5 (permalink)  
Antiguo 07/07/2015, 13:46
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Problemas para trabajar con fechas en PHP

Cita:
Warning: strtotime() expects parameter 1 to be string, object given in "..\encuentra_datos_cliente.php" on line 91...
Ese problema es básico ¿sí sabes trabajar con registro de la base de datos?

El asunto es que $registro es un array, y de ahí debes tomar el valor adecuado:

Código PHP:
Ver original
  1. // MAL
  2. strtotime($registro);
  3.  
  4. // BIEN
  5. strtotime($registro['Fecha_ingreso']);

Por favor: consulta un manual.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 07/07/2015, 14:06
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 5 meses
Puntos: 263
Respuesta: Problemas para trabajar con fechas en PHP

Y porque no solo colocaste:
Código PHP:
Ver original
  1. if($ row_result [fecha_ingreso] < date ("Y-m-d"))
  2. {
  3. echo "Contrato finalizado";
  4. }
  5. else {
  6. echo "Contrato Activo";
  7. }
  #7 (permalink)  
Antiguo 08/07/2015, 11:56
 
Fecha de Ingreso: julio-2015
Mensajes: 11
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Problemas para trabajar con fechas en PHP

Cita:
Iniciado por xfxstudios Ver Mensaje
Y porque no solo colocaste:
Código PHP:
Ver original
  1. if($ row_result [fecha_ingreso] < date ("Y-m-d"))
  2. {
  3. echo "Contrato finalizado";
  4. }
  5. else {
  6. echo "Contrato Activo";
  7. }

Coloque el código como dijiste y solo me muestra "Contrato Finalizado" (independiente si le coloco una fecha de hoy)
  #8 (permalink)  
Antiguo 08/07/2015, 12:53
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 5 meses
Puntos: 263
Respuesta: Problemas para trabajar con fechas en PHP

Prueba de esta manera, a mi me funciono perfecto, me arrojo el siguente resultado:
Cita:
2015-07-08-Contrato Vigente
2015-07-05-Contrato vencido
Código PHP:
Ver original
  1. $mysqli = new MySQLi($hostname_seguridad, $username_seguridad, $password_seguridad, $database_seguridad);
  2. $result = $mysqli->query("SELECT * FROM fechas");
  3. $totalRows_result = mysqli_num_rows($result);
  4. while($row = mysqli_fetch_array($result))
  5. {
  6.     if($row['fecha'] < date("Y-m-d")) {
  7.         $msg = "Contrato vencido";
  8.     }
  9.     else {
  10.         $msg = "Contrato Vigente";
  11.     }
  12.     echo $row['fecha']."-".$msg."<br>";
  13. }
  #9 (permalink)  
Antiguo 08/07/2015, 12:56
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 5 meses
Puntos: 263
Respuesta: Problemas para trabajar con fechas en PHP

Prueba asi, a mi me arrojo un resultado positivo y creo que es lo que quieres:
resultado:
Cita:
2015-07-08-Contrato Vigente
2015-07-05-Contrato vencido
codigo:
Código PHP:
Ver original
  1. while($row = mysqli_fetch_array($result))
  2. {
  3.     if($row['fecha'] < date("Y-m-d")) {
  4.         $msg = "Contrato vencido";
  5.     }
  6.     else {
  7.         $msg = "Contrato Vigente";
  8.     }
  9.     echo $row['fecha']."-".$msg."<br>";
  10. }
  #10 (permalink)  
Antiguo 08/07/2015, 13:01
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 5 meses
Puntos: 263
Respuesta: Problemas para trabajar con fechas en PHP

tambien podrias colocarlos asi para que te de un mensaje distinto si el contrato finaliza el dia de hoy por ejemplo:
Código PHP:
Ver original
  1. while($row = mysqli_fetch_array($result))
  2. {
  3.     if($row['fecha'] < date("Y-m-d")) {
  4.         $msg = "Contrato vencido";
  5.     }
  6.     else if($row['fecha'] == date("Y-m-d")){
  7.         $msg = "Contrato vence HOY";
  8.     }
  9.     else {
  10.         $msg = "Contrato Vigente";
  11.     }
  12.     echo $row['fecha']."-".$msg."<br>";
  13. }
tambien puedes cambiar esta linea de esta manera para que te muestre la fecha en latino si esta guardada en formato americano, no se algo asi:
Código PHP:
Ver original
  1. echo date("d-m-Y", strtotime($row['fecha']))."-".$msg."<br>";

Última edición por xfxstudios; 08/07/2015 a las 13:17
  #11 (permalink)  
Antiguo 08/07/2015, 13:45
 
Fecha de Ingreso: julio-2015
Mensajes: 11
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Problemas para trabajar con fechas en PHP

Cita:
Iniciado por xfxstudios Ver Mensaje
tambien podrias colocarlos asi para que te de un mensaje distinto si el contrato finaliza el dia de hoy por ejemplo:
Código PHP:
Ver original
  1. while($row = mysqli_fetch_array($result))
  2. {
  3.     if($row['fecha'] < date("Y-m-d")) {
  4.         $msg = "Contrato vencido";
  5.     }
  6.     else if($row['fecha'] == date("Y-m-d")){
  7.         $msg = "Contrato vence HOY";
  8.     }
  9.     else {
  10.         $msg = "Contrato Vigente";
  11.     }
  12.     echo $row['fecha']."-".$msg."<br>";
  13. }
tambien puedes cambiar esta linea de esta manera para que te muestre la fecha en latino si esta guardada en formato americano, no se algo asi:
Código PHP:
Ver original
  1. echo date("d-m-Y", strtotime($row['fecha']))."-".$msg."<br>";
Gracias y de verdad funciono, pero en el codigo falta tomar 1 consideración, el hecho de que la subscripcion dura 30 días, y cuando coloco tu codigo e ingreso con fecha de, por ej. 1 semana atras, me muestra el mensaje de "contrato terminado"...
  #12 (permalink)  
Antiguo 08/07/2015, 15:10
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 5 meses
Puntos: 263
Respuesta: Problemas para trabajar con fechas en PHP

En ese caso te sugiero registrar tanto la fecha de inicio como la posible fecha fin y filtrar por esta ultima
Código PHP:
Ver original
  1. $ fechainicio = "2015-07-04";
  2. $ fechafin = strtotime ('+30 day', strtotime ( $ fechainicio));
  3. $ fechafin = date ('Y-m-d', $ fechafin);
  4. echo $ fechainicio."<br>";
  5. echo $ fechafin
Con esto registras de una vez la fecha fin al seleccionar la fecha de inicio
  #13 (permalink)  
Antiguo 08/07/2015, 15:27
 
Fecha de Ingreso: julio-2015
Mensajes: 11
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Problemas para trabajar con fechas en PHP

Cita:
Iniciado por xfxstudios Ver Mensaje
En ese caso te sugiero registrar tanto la fecha de inicio como la posible fecha fin y filtrar por esta ultima
Código PHP:
Ver original
  1. $ fechainicio = "2015-07-04";
  2. $ fechafin = strtotime ('+30 day', strtotime ( $ fechainicio));
  3. $ fechafin = date ('Y-m-d', $ fechafin);
  4. echo $ fechainicio."<br>";
  5. echo $ fechafin
Con esto registras de una vez la fecha fin al seleccionar la fecha de inicio
Me resulto para capturar la fecha de inicio y fin, solo me falta mostrar el mensaje final de convenio vigente o terminado, el código lo tengo así:

<?php
$con = mysqli_connect('localhost', 'root', '', 'gimnasio');
$id=$_POST["id"];
$rut=$_POST["rut"];
$link="select Fecha_ingreso from `gym` WHERE id='$id' or rut='$rut'";
$result = mysqli_query($con, $link);

while ($registro = mysqli_fetch_array($result)){
$fechainicio = $registro['Fecha_ingreso'];
$fechafin = strtotime ('+30 day', strtotime ( $fechainicio));
$fechafin = date ('Y-m-d', $fechafin);
echo $fechainicio."<br>";
echo $fechafin;

if($fechainicio < $fechafin)
{
echo "convenio vigente";
}else{
{ echo "convenio terminado";}
}
}
?>
  #14 (permalink)  
Antiguo 08/07/2015, 15:41
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 5 meses
Puntos: 263
Respuesta: Problemas para trabajar con fechas en PHP

Mas arriba te coloque unos codigos con el while, juega con ellos y listo ahi te sale
  #15 (permalink)  
Antiguo 08/07/2015, 15:57
 
Fecha de Ingreso: julio-2015
Mensajes: 11
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Problemas para trabajar con fechas en PHP

Cita:
Iniciado por xfxstudios Ver Mensaje
Mas arriba te coloque unos codigos con el while, juega con ellos y listo ahi te sale
Al fin pude sacarlo y lo deje así:

<?php
$con = mysqli_connect('localhost', 'root', '', 'gimnasio');
$id=$_POST["id"];
$rut=$_POST["rut"];
$link="select Fecha_ingreso from `gym` WHERE id='$id' or rut='$rut'";
$result = mysqli_query($con, $link);

while ($registro = mysqli_fetch_array($result)){
$fechainicio = $registro['Fecha_ingreso'];
$fechafin = strtotime ('+30 day', strtotime ( $fechainicio));
$fechafin = date ('Y-m-d', $fechafin);


if($fechafin < date("Y-m-d"))
{
$msg = "<span class='texto_rojo'>Contrato Vencido</span>";
}
else if($fechafin == date("Y-m-d")){
$msg = "<span class='texto_rojo'>Contrato vence HOY</span>";
}
else {
$msg = "<span class='texto_azul'>Contrato Vigente</span>";
}
echo $msg."<br>";
}
?>

Muchas gracias!!!
  #16 (permalink)  
Antiguo 08/07/2015, 16:08
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 5 meses
Puntos: 263
Respuesta: Problemas para trabajar con fechas en PHP

Me alegra, ya puedes marcar el tema como solucionado

Etiquetas: fecha, mysql, registro, select
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 14:08.