Foros del Web » Programando para Internet » PHP »

Comparar fechas

Estas en el tema de Comparar fechas en el foro de PHP en Foros del Web. Hola! Estoy creando un sistema de "baneo" para los usuarios de mi web. El sistema es sencillo, si en la base de datos pone "no" ...
  #1 (permalink)  
Antiguo 10/04/2012, 18:35
 
Fecha de Ingreso: enero-2011
Mensajes: 59
Antigüedad: 13 años, 3 meses
Puntos: 2
Comparar fechas

Hola!
Estoy creando un sistema de "baneo" para los usuarios de mi web. El sistema es sencillo, si en la base de datos pone "no" el usuario no registra sus datos y por lo tanto no puede "iniciar sesión"

Lo que pasa es que este sistema así es simple, pero me gustaría añadir las funciones de tiempo de baneo.

Es decir, yo baneo a un determinado usuario durante un tiempo a mi elección, entonces cuando el usuario intente entrar (estando baneado) le aparecerá un aviso indicandole la razón del baneo, el tiempo que ha sido baneado y el tiempo restante para que se desbanee (automáticamente)

Necesito saber insertar las fechas correctamente a la base de datos y luego compararlas...

Un saludo!

PD: Aquí tienes el código que uso para iniciar sesión:
Código PHP:
<?
if($user_ok mysql_fetch_array($usuarios)) //Antes realizo una consulta a la base de datos verificando al usuario
{
session_register("baneo");
session_register("razonbaneo");
$_SESSION[baneo] = $user_ok["baneo"];
$_SESSION[razonbaneo] = $user_ok["razonbaneo"];
$baneo $_SESSION[baneo];
$razonbaneo $_SESSION[razonbaneo];
if (
$baneo == 'no'){
session_register("id");
session_register("nick"); 
...
$_SESSION[id] = $user_ok["id"];
$_SESSION[nick] = $user_ok["nick"]; 
...
$aviso "Hola $_SESSION[nick],<br />
Gracias por iniciar sesión"
;
}else{
$aviso "Ha sido baneado por la siguiente raz&oacute;n:<br />
$razonbaneo"
;
session_destroy();
}
echo 
"$aviso";
?>
  #2 (permalink)  
Antiguo 10/04/2012, 18:48
Avatar de alvidales  
Fecha de Ingreso: febrero-2012
Mensajes: 108
Antigüedad: 12 años, 2 meses
Puntos: 11
Respuesta: Comparar fechas

Puedes guardar la fecha de baneo (hasta cuando estara baneado el usuario) en un campo dentro de la tabla en tu base de datos y al momento de sacar los datos de los usuarios, te traes la fecha y la comparas con la fecha del sistema (asi como haces con el if ($baneo == 'no')... si tienes alguna duda me dices y te hecho la mano, saludos
  #3 (permalink)  
Antiguo 10/04/2012, 18:49
Avatar de alvidales  
Fecha de Ingreso: febrero-2012
Mensajes: 108
Antigüedad: 12 años, 2 meses
Puntos: 11
Respuesta: Comparar fechas

Para guardar las fechas, utiliza Date en el formato YYYY-MM-DD ó DateTime en el formato YYYY-MM-DD HH:MM:SS
  #4 (permalink)  
Antiguo 11/04/2012, 05:01
 
Fecha de Ingreso: enero-2011
Mensajes: 59
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: Comparar fechas

Efectivamente, lo de comprar las variables y eso, mas o menos sé; lo que pasa es que no se como tener las fechas guardadas en la base de datos para luego compararlas y "restar" el tiempo que le quede de baneo. Voy a probar en la base de datos con el formato DateTime, para ser más preciso.
Un saludo y gracias por tu ayuda!

PD: Y luego como cambio "YYYY-MM-DD HH:MM:SS" por el formato español "DD-MM-YYYY HH:MM:SS" ?
  #5 (permalink)  
Antiguo 11/04/2012, 05:47
Avatar de odiseus  
Fecha de Ingreso: enero-2011
Mensajes: 109
Antigüedad: 13 años, 3 meses
Puntos: 3
Respuesta: Comparar fechas

Cita:
Iniciado por Polkiko Ver Mensaje
Efectivamente, lo de comprar las variables y eso, mas o menos sé; lo que pasa es que no se como tener las fechas guardadas en la base de datos para luego compararlas y "restar" el tiempo que le quede de baneo. Voy a probar en la base de datos con el formato DateTime, para ser más preciso.
Un saludo y gracias por tu ayuda!

PD: Y luego como cambio "YYYY-MM-DD HH:MM:SS" por el formato español "DD-MM-YYYY HH:MM:SS" ?
Échale un ojo a las funciones de fecha y hora de MySQL:

http://dev.mysql.com/doc/refman/5.5/...functions.html

Y para formatear fechas, en concreto mira DATE_FORMAT():

http://dev.mysql.com/doc/refman/5.5/...on_date-format

Puedes usar esta función en tu select, por ejemplo y así ya obtienes la fecha formateada.
__________________
--------
Unelink - Servidores virtuales (VPS), servidores dedicados, hosting, dominios.
Blog de unelink
  #6 (permalink)  
Antiguo 11/04/2012, 06:04
 
Fecha de Ingreso: enero-2011
Mensajes: 59
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: Comparar fechas

Ya he conseguido hacer mi sistema ;)
Funciona perfecto, unicamente me falta poner la fecha en el formato español e indicarle al usuario cuanto tiempo le queda para "desbanearse"
Saludos!
  #7 (permalink)  
Antiguo 11/04/2012, 06:10
 
Fecha de Ingreso: enero-2011
Mensajes: 59
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: Comparar fechas

Cita:
Iniciado por odiseus Ver Mensaje
Y para formatear fechas, en concreto mira DATE_FORMAT():

http://dev.mysql.com/doc/refman/5.5/...on_date-format

Puedes usar esta función en tu select, por ejemplo y así ya obtienes la fecha formateada.
No he entendido nada de DATE_FORMAT. Yo cojo los valores de esta forma:
Código PHP:
<?
session_register
("fechabaneo");
$_SESSION[fechabaneo] = $user_ok["fechabaneo"]; //Donde user_ok a ha realizado la consulta a la base de datos...
$fechabaneo $_SESSION[fechabaneo];  // Finalmente la quedo mas sencilla jejeje
// Si imprimo la variable $fechabaneo, me saldrá con YYYY-MM-DD HH:MM:SS (como está en la base de datos) y solo le quiero dar la vuelta al dia y al año
?>
¿Alguna idea de como cambiar el formato?
He buscado por google y no me he aclarado de nada jajajaja, aunque he provado con algo como:
Código PHP:
$fechabaneo DATE_FORMAT("d-m-Y H:m:s"$fechabaneo); 
  #8 (permalink)  
Antiguo 11/04/2012, 06:19
Avatar de odiseus  
Fecha de Ingreso: enero-2011
Mensajes: 109
Antigüedad: 13 años, 3 meses
Puntos: 3
Respuesta: Comparar fechas

Cita:
Iniciado por Polkiko Ver Mensaje
No he entendido nada de DATE_FORMAT. Yo cojo los valores de esta forma:
Código PHP:
<?
session_register
("fechabaneo");
$_SESSION[fechabaneo] = $user_ok["fechabaneo"]; //Donde user_ok a ha realizado la consulta a la base de datos...
$fechabaneo $_SESSION[fechabaneo];  // Finalmente la quedo mas sencilla jejeje
// Si imprimo la variable $fechabaneo, me saldrá con YYYY-MM-DD HH:MM:SS (como está en la base de datos) y solo le quiero dar la vuelta al dia y al año
?>
Ah, vale, si lo quieres formatear desde PHP entonces hay que usar las funciones de fecha de PHP jejeje, las que te puse eran de MySQL.

Puedes probar algo así:

Código PHP:
$timestamp strtotime($fechabaneo);
$fechaFormateada date("d-m-Y H:i:s"$timestamp); 
Con esto primero obtienes el timestamp de la fecha y luego la formateas

Las funciones de fecha de PHP son:

http://www.php.net/manual/es/ref.datetime.php
__________________
--------
Unelink - Servidores virtuales (VPS), servidores dedicados, hosting, dominios.
Blog de unelink
  #9 (permalink)  
Antiguo 11/04/2012, 07:04
 
Fecha de Ingreso: enero-2011
Mensajes: 59
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: Comparar fechas

Ok... esta tarde probaré haber que tal
¿Y como le resto ahora el tiempo de baneo?
Es decir, fecha del baneo - fecha actual = dias, horas y minutos (no hacen falta los meses y años jejeje)
  #10 (permalink)  
Antiguo 11/04/2012, 16:57
 
Fecha de Ingreso: enero-2011
Mensajes: 59
Antigüedad: 13 años, 3 meses
Puntos: 2
Ya lo he conseguido

Bueno, pues al final de tantos lios, he conseguido (con mis conocimientos y los de aquí, por supuesto) crear el sistema jejeje
He hecho un montón de cosas que supongo que se podrían simplificar... pero me gusta ir aprendiendo pasito a pasito
Aqui les dejo como lo hice:
Código PHP:
<?
$date 
date("Y-m-d H:i:s"strtotime('+1 hour'));
$date2 strtotime($date);
if (
$date $fechabaneo){
$timestamp strtotime($fechabaneo); 
$fechabaneoformateada date("d/m/Y - H:i"$timestamp); 

$timestamp2 strtotime($fechainiciobaneo); 
$fechainiciobaneo2 date("d/m/Y - H:i"$timestamp2);

$restodetiempo1 $timestamp $date2;
$restodetiempo round($restodetiempo1 / (60 60 24));
if (
$restodetiempo == 1){
$formato "día";
}else{
$formato "días";
}
if (
$restodetiempo == 0){
$restodetiempo round($restodetiempo1 / (60 60));
if (
$restodetiempo == 1){
$formato "hora";
}else{
$formato "horas";
}
?>
Luego ya imprimo las variables
Un saludo a todos y gracias!

Etiquetas: mysql, usuarios
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:53.