PDA

Ver la Versión Completa : fechas y datos MySql


elcigarra
28-10-2006, 03:07:59
Hola, amigos.
Estoy haciendo una página php que va a listar eventos. Para ello los eventos van a estar en una tabla MySQL y van a tener, entre otras cosas dos campos con la fecha de inicio y la fecha de finalización de cada evento.

El asunto es que para facilitar la entrada de datos (de los eventos) los campos fecha los hice de tipo VARCHAR ya que el usuario hacía click sobre un calendario y la fecha le quedaba escrita (para evitar errores), eso iba directamente a la base de datos.

En la página del listado quiero saber donde estamos temporalmente, es decir, necesito comparar estas fechas (o más bien textos que representan fechas) con la fecha actual y saber si ya pasaron o entan ocurriendo en este momento (o sea que hoy estámos entre la FechaInicio y la FechaFin). Cuando fuí a hacerlo me encontré con tres problemas que son los que les transmito ahora:

a) Lo inicial y obvio. No tengo idea como obtener la fecha del sistema del usuario con php.

b) No tengo idea como comparar estos datos de texto de la tabla con esta fecha luego de obtenida.

c) No sé si es posible asegurar la fecha verdadera más allá de que el usuario tenga una fecha equivocada en su sistema (Si no se puede, con la fecha del sistema estaría bien igual).

D-MO
28-10-2006, 09:09:03
a) Lo inicial y obvio. No tengo idea como obtener la fecha del sistema del usuario con php.Lo veo muy dificil, por no decir imposible, ya que php toma la hora del servidor.
Las alternativas que veo son las siguiente:
Que el conozcas algunos datos del usuario, tales como la zona horaria de este, así cada vez que decida ver un evento, se hará una suma/resta a la hora/fecha del servidor dependeiendo de la ubicación de este. Para hacer esto es necesario que sea un usuario registrado y durante el registro deberás pedirle este dato.
Hacer uso de Ajax de la siguiente forma:
El usuario entra a la web y con javascript tomas la hora del sistema.
Luego envías esta hora a tu script php y este se encargará de hacer las comparaciones.
Hechas las comparaciones muestras el texto que indique el estado del evento.
b) No tengo idea como comparar estos datos de texto de la tabla con esta fecha luego de obtenida.
Todo dependería de que formato tendrán las fechas, por ejemplo, si la fecha de inicio del evento es "1 de noviembre de 2006" y la de fin del evento es "5 de noviembre de 2006", podríamos hacer algo como esto:
<?php
$fecha_inicio= '1 november 2006';//Colocamos la fecha de inicio
$fecha_fin = '5 november 2006';//y la fecha de finalización

$fecha_actual = time(); //Tomamos la fecha actual (del servidor)

?> Ahora debemos comparar que la fecha actual se encuentra dentro de el rango especificado por las variables "$fecha_inicio" y "$fecha_fin", para lo cual convertiremos estos datos en TimeStamps de Unix con la función strtotime():
<?php
$finicio = strtotime($fecha_inicio);
$ffin = strtotime($fecha_fin);

if($fecha_actual>=$finicio){
if($fecha_actual<=$ffin){
///---El evento está activo
} else {
///---El evento ya finalizo
}
} else{
///---El evento no ha iniciado
}
?>
c) No sé si es posible asegurar la fecha verdadera más allá de que el usuario tenga una fecha equivocada en su sistema (Si no se puede, con la fecha del sistema estaría bien igual). En este caso, bastaría con que revisaras si la fecha está en el rango -12,+12 horas de la fecha del servidor, ya que no puede tener una fecha con 12 horas de adelanto o atraso a la de este.

Pues no se me ocurre nada mas, talvés porque aquí es la 1:00 de la mañana:p, espero haberte ayudado en algo.

Saludos.

elcigarra
28-10-2006, 13:10:04
Para facilitar y al mismo tiempo para complicar:

La página es turística y local por lo que la única fecha que importa es la del Uruguay (que es el país donde se realizan los eventos). No importa que el usuario esté en españa si aquí se realiza el evento el 5 de noviembre, es el 5 de noviembre de uruguay. Yo sé que estoy muy atrás en conocimientos pero para saber la fecha y hora del uruguay? Yo tengo un hosting pago y ni siquiera sé donde está el servidor. Podría preguntar donde está, pero no es posible obtener la fecha y hora local independientemente de todo (es decir, del servidor y del usuario)?

Y la otra complicación:
La función StrToTime convierte cualquier formato en fecha?, porque yo tengo un script que convierte las fechas en texto de formato DD/MM/AAAA. No hay confusiones si el mes está antes de día o si es "5 de Noviembre de 2006" y eso? Qué tan astuta puede ser esta función?

D-MO
28-10-2006, 16:21:26
Para lo primero, puedes hacer lo siguiente:

Haz un script que te muestre la hora del servidor y comparala con la hora de Uruguay
Calcula la diferencia de horario
cada vez que se visualice la hora en la página web sumale/restale la diferencia del horario para mostrar la hora realy, para lo segundo:
La función strtotime acepta únicamente fechas en formato inglés, por lo que identificaría "1 november 2006" pero no "1 de noviembre de 2006", pero puedes hacer una función que te traduzca el texto reemplazando "de noviembre de" por "november" y asunto arreglado;) .

Revisa la información de la función strtotime (http://www.php.net/manual/es/function.strtotime.php) en el manual (http://www.php.net/manual/es/) que se encuentra en el sitio web oficial (http://www.php.net/) de php.

Saludos.

elcigarra
28-10-2006, 18:30:37
Gracias, Darwin