2011-03-05 16 views
12

hola estoy creando una aplicación web, donde si un usuario se registra, le mostraremos la fecha de creación.¿Cómo detectar automáticamente la zona horaria del usuario?

Para eso estamos utilizando la marca de tiempo actual en mi tabla sql. Que muestra el tiempo del servidor. Pero no sabemos cómo convertir el tiempo según la zona horaria del usuario.

Porque no somos obteniendo el país del usuario.

Puede alguno de ayuda que lo arregle

Gracias de antemano :)

+0

Bueno, ¿cómo se quiere * * para solucionarlo? La opción más confiable puede ser preguntarle a un usuario por su zona horaria –

+0

¿hay alguna otra opción como detectar la zona horaria automáticamente? –

+0

Ver esta pregunta: [Detectar automáticamente la hora local actual del usuario con JavaScript o PHP] (http://stackoverflow.com/ preguntas/863474/automatically-detect-users-current-local-time-with-javascript-or-php) –

Respuesta

23

el uso de JavaScript solución

http://www.onlineaspect.com/2007/06/08/auto-detect-a-time-zone-with-javascript/

demostración debe mostrar su zona horaria en el cuadro de selección.

http://onlineaspect.com/examples/timezone/index.html (enlace no válido)

+1

Seguí una tonelada de enlaces que me llevaron a https://bitbucket.org/pellepim/jstimezonedetect, que parece una solución mucho más sólida que su enlace, que supuso que estaba cerca, pero no se dio cuenta de que estaba bajo el horario de verano. –

8

No se puede obtener la zona horaria de un usuario en el servidor, y sólo se puede hacer una conjetura en que en el cliente lado.

Si confía en obtener la dirección IP del usuario, puede geolocalizarla y deducir un tiempo.

La forma en que esto generalmente se hace es preguntando al usuario (cuando se registran, por ejemplo) en qué zona horaria están y luego usar esto en los cálculos de tiempo.

+8

Esto también proporciona una pregunta oportuna para atrapar spambots al incluir dos opciones de zona horaria falsas ya que los bots a menudo elegirán la primera o último elemento en una lista desplegable. – JustinStolle

+0

Puede hacer que la página web envíe la hora actual en todas las solicitudes que el usuario envíe (con javascript). Luego, en php, puede calcular el desplazamiento comparando el tiempo recibido de la solicitud con el tiempo que php cree que es. –

+0

Prefiero el registro de zona horaria. Hoy en día las personas a menudo viajan y algunas veces quieren saber algún evento en la zona horaria de su país, no la zona horaria de su actual IP o navegador. Esto significa que en el navegador también debe tener cuidado con los objetos Date() porque cambian automágicamente a la zona horaria del navegador al realizar una cadena, lo que podría ser inesperado. – JustAMartin

1

El método más confiable es pedirle al usuario que configure su propia zona horaria. Creo que es una buena idea tener una marca de tiempo de cuando la cuenta de los usuarios fue creada en su propia base de datos para su propio uso.

Estos son los pasos que se necesitaría para tener una zona horaria usuarios:

1- preservar la columna de marca de tiempo que tiene para su propio uso
2- Agregar una nueva columna para los usuarios reales zona horaria
3 - utilizar Javascript para recuperar la zona horaria:
new Date().getTimezoneOffset()/60;<br/>
4- también permite a los usuarios establecer allí propia zona horaria, así

también puede dar un paso más allá y utilizar un servicio de localización geográfica para detectar una zona horaria usuarios.

+5

¿alguien puede decir cómo Facebook convertir la zona horaria sin obtener la zona horaria del usuario? –

4

Para la geolocalización puede utilizar http://ipinfodb.com/, funciona muy bien con un API!

function GeoLocation($precision='city',$ip,$api) { 

    if($precision == "country") { 
     $file = "ip_query_country.php"; 
    } 
    else { 
     $file = "ip_query.php"; 
    } 

    $params = @file_get_contents("http://api.ipinfodb.com/v2/ip_query.php?key=".$api."&ip=".$ip."&timezone=true"); 
    $fields = @new SimpleXMLElement($params); 
    foreach($fields as $field => $val) { 
     $result[(string)$field] = (string)$val; 
    } 
    return $result; 
} 
+7

Si decide hacer esto, permita que un usuario lo anule fácilmente. En el trabajo estoy en el Reino Unido, pero nuestro acceso a Internet está conectado a través de Nueva York y hay bastantes sitios web que deducen erróneamente dónde estoy y no tienen forma de corregirlo. – jcoder

2

Con una pequeña "trampa" (usando el cliente de script del lado) y publicar el resultado a su servidor, puede acceder a la zona horaria de su cliente.

Por ejemplo, usted puede utilizar esta librería javascript:

https://bitbucket.org/pellepim/jstimezonedetect

var tz = jstz.determine(); // Determines the time zone of the browser client 
tz.name(); // Returns the name of the time zone eg "Europe/Berlin" 

Demostración: http://pellepim.bitbucket.org/jstz/

+0

enlace de demostración está roto .. –

Cuestiones relacionadas