Foros del Web » Programando para Internet » PHP »

Servidor extranjero, hora errónea.

Estas en el tema de Servidor extranjero, hora errónea. en el foro de PHP en Foros del Web. Saludos. Mi servidor es extranjero, me marca 3 HORAS MÁS de las que son en mi país. Yo utilizo funciones de tiempo en mis SCRIPTS ...
  #1 (permalink)  
Antiguo 15/12/2005, 19:36
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Servidor extranjero, hora errónea.

Saludos.

Mi servidor es extranjero, me marca 3 HORAS MÁS de las que son en mi país.

Yo utilizo funciones de tiempo en mis SCRIPTS y cuando uso CURDATE() me da una fecha que no es (durante tres horas al día).

CURDATE() es una función de MySQL, ¿me recomiendan manejar el tiempo en PHP?
  #2 (permalink)  
Antiguo 16/12/2005, 07:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En Mysql también tienes funciones de tratamiento de fechas con diferencias horarias. De hecho lo ideal sería que gestionases tus fechas como GMT 0 y cuando presentes tus fechas desde tus BD generases la fecha para la diferencia horaria que esté el usuario. Podrías tener usuarios de un país .. y de otros paises (con diferentes franjas horarias). También te vendrá bien trabajar así si te cambias de servidor a otro que esté en tu misma franja horaria .. sólo tendrías que tocar un ajuste "global" sobre la diferencia horaria a mostrar las fechas según donde estés.

Si ya gestionas fechas con esa diferencia horaria .. usa funciones SQL tipo DATE_SUBB() o DATE_ADD() según corresponda y resta o suma las horas que correspondan.

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

Un saludo,
  #3 (permalink)  
Antiguo 16/12/2005, 12:31
 
Fecha de Ingreso: agosto-2005
Mensajes: 109
Antigüedad: 18 años, 7 meses
Puntos: 0
Si, es un problema recurrente. Yo lo resolví definitivamente con lo que sigue... lo pongo en un include y la variable '$ahora' es la hora que és, según la 'zona' que has definido.... y te da igual en qué zona está el server.

Un saludo.

Código PHP:
<?php
    
//  desde el server a GMT_local (España == '+1')
    
function GetTZOffset$GMT_local ) {
      
$Offset date("O"0);            //  Diferencia con la hora Greenwich (GMT) en horas.
      
$Parity $Offset ? -1;
      
$Offset $Parity $Offset;
      
$Offset = ($Offset - ($Offset 100))/100*60 $Offset 100;
      
$TZOffset $Parity $Offset;
      
$TZOffset = (- ($TZOffset*60)) + ($GMT_local 3600);
      return 
$TZOffset;
    }

    
$zona "+1";            //  CET, Madrid
    
$ahora time() + GetTZOffset"+1" );
    
    
setlocaleLC_ALL'spanish' );
    echo 
"Hora GMT$zona ahora: " strftime"%A %d %B %Y&nbsp;-&nbsp;%H:%M:%S"$ahora ) . "<br>";
?>
  #4 (permalink)  
Antiguo 16/12/2005, 18:20
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Hey, thanks...

Gracias por su respuesta.

La forma de Shockley está cool, pero como ahora ando usando MySQL, me gustaría delegar en el manejador de BD todo lo que corresponde a manejo de fechas. Así, cuando algo falle, quizá me tarde menos en hallar el error.

Lo resolví justo con SUBDATE, el server está en Argentina (GTM-3) y yo ando en México,City (GTM-6).

Código PHP:
//Así le quito a la hora de Argentina 3 horas.
SUBDATE(NOW(), INTERVAL 3 HOUR)

//Luego, le di formato a ese bloque.
DATE_FORMAT(SUBDATE(NOW(), INTERVAL 3 HOUR),'%Y-%m-%d')

//Finalmente, aquí está la consulta completa.
$consulta="SELECT *, DATE_FORMAT(SUBDATE(NOW(), INTERVAL 3 HOUR),'%Y-%m-%d') as fecha_actual FROM usuarios WHERE username='$username' AND password='$password'";

//En realidad no pensaba mostrar la fecha, 
//pero quería almacenar la fecha última en la 
//que un usuario me visitó y se loggeó y así 
//poder saber cuántas visitas hacía en un 
//periodo de tiempo (pero sólo vale una por día). 
Thanks, very !
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 03:11.