2012-05-02 10 views
7

Estamos desarrollando un sitio web, que será utilizado por personas de todo el mundo. Hay una sección de chat en el sitio web y queremos que los mensajes aparezcan con una marca de tiempo. Estoy almacenando en una base de datos una marca de tiempo para cada mensaje.¿Cómo mostrar la hora localizada, según la ubicación de un visitante?

Cuál es la manera de mostrar el tiempo correcto para cada mensaje al visitante, en función de su hora local.

No quiero pedirle al usuario su zona horaria. ¿Hay alguna forma de hacerlo, usando solo PHP? Si no, ¿cuál es la forma de mostrar la hora actual, en función de la hora actual de los visitantes, utilizando javascript?

+3

Utilice Javascript en la interfaz para tomar la marca de tiempo del servidor, y calcule e imprima la hora local.Será más fácil si las marcas de tiempo del servidor que está almacenando son UTC + 0. – Nadh

Respuesta

7

se puede hacer una conjetura sobre la zona horaria usuarios con IP geo

http://php.net/manual/en/book.geoip.php

O puede usar javascript:

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

+0

Esto es lo que utilicé: var date = new Date (Date.UTC (year, month, day, hour, minute)); $ ('#' + selector) .html (? \t (Date.getHours (9)> Date.getHours() :('0' + Date.getHours())) + '' +: \t (date.getMinutes()> 9? date.getMinutes() :('0' + date.getMinutes())) ); donde año, mes, día, hora, minuto pasan el servidor de la base de datos. –

-2

PHP es un lenguaje de scripting del lado del servidor por lo que no puede obtener la hora local del visitante a menos que use GeoIP. Deberías usar JavaScript en su lugar.

0

no tengo la penetración en cuanto a cómo hacer esto en PHP, pero como también está preguntando acerca de javascript, puede usar el objeto Date.

var d = new Date(); // creates a Date object and initializes it with 
        // user's current time 

d.getTimezoneOffset(); // time zone offset in minutes 

d.getDay(); 
d.getHours(); 

/* etc... gets information about the user's local time */ 

Para tener una referencia completa: http://www.w3schools.com/jsref/jsref_obj_date.asp

Tenga en cuenta también que este es, por supuesto, sobre la base de ajustes de tiempo de la computadora del usuario. No verifica la posición mundial del usuario en función de su dirección de red. Si realmente quieres hacer eso, entonces ignora mi respuesta :)

+0

Necesito lo mismo, pero debe calcularse sobre la base de la marca de tiempo, devuelta por el servidor. –

1

Puedes lograr esto con PHP si conoces la dirección IP de los usuarios ($ _SERVER ['REMOTE_ADDR']). Mira en Geo-IP (http://php.net/manual/en/book.geoip.php) para hacer coincidir la ubicación < -> ip-address

La dirección IP no NECESARIO reflejar la posición de los usuarios "real" si (por ejemplo) que él/ella está detrás de un proxy. También he visto un comportamiento extraño cuando uso dispositivos móviles (GPRS/edge/3G/HSDPA).

+0

Voy a omitir el seguimiento de geolocalización: no es preciso, requiere mucho espacio y tiempo (en la base de datos) si está en mi servidor y se pagan la mayoría de las API. Buscaré una forma de hacerlo utilizando javascript y una marca de tiempo del servidor. –

0

Como han dicho otras respuestas, Javascript es la tecnología adecuada para esto, sin embargo, si insiste en usar php, entonces una forma posible de hacerlo es mediante el uso de una biblioteca o servicio de geolocalización para localizar la zona horaria de la IP Dirección.

Este será sin embargo siempre será una mejor solución de la conjetura y en muchos casos la dirección IP del visitante está viniendo, no estén de acuerdo con la zona horaria del usuario está actualmente en.

+0

Estoy listo para usar javascript si es necesario. Como puedes adivinar, no quiero confiar en el seguimiento de geolocalización. –

0

El único garantizado manera de mostrar exactamente el el tiempo configurado en la PC del usuario es usar JavaScript. Puede probar la detección geo del lado del servidor, pero las bases de datos nunca son perfectas o el usuario podría ser un cliente remoto de algún proveedor de un huso horario absolutamente diferente. Envíe sus marcas de tiempo como segundos desde Unix epoch time, luego inicialice Date object en JavaScript con este tiempo y use sus métodos .get (sin UTC) para recuperar los fragmentos de tiempo correspondientes en la representación local del usuario. También es una buena idea brindarle al usuario la opción de utilizar una zona horaria específica en caso de que desee anular la hora local por algún motivo.

Cuestiones relacionadas