Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   fechas y datos MySql (https://www.clubdelphi.com/foros/showthread.php?t=36927)

elcigarra 28-10-2006 03:07:59

fechas y datos MySql
 
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

Cita:

Empezado por elcigarra
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.
Cita:

Empezado por elcigarra
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:
Código PHP:

<?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():
Código PHP:

<?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
}
?>

Cita:

Empezado por elcigarra
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 real
y, 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 en el manual que se encuentra en el sitio web oficial de php.

Saludos.

elcigarra 28-10-2006 18:30:37

Gracias, Darwin


La franja horaria es GMT +2. Ahora son las 01:50:14.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi