2012-05-02 35 views
7

我們正在開發一個網站,將來自世界各地的人使用。網站上有一個聊天部分,我們希望信息以時間戳出現。我在數據庫中存儲每條消息的時間戳。如何根據訪問者的位置顯示本地化時間?

根據當地時間顯示每條消息給訪客的正確時間的方法是什麼?

我不想問用戶他的時區。有沒有辦法做到這一點,只使用PHP?如果沒有 - 根據訪問者的當前時間顯示當前時間的方式是什麼,使用javascript?

+3

在前端使用Javascript取服務器時間戳,並計算並打印當地時間。如果您存儲的服務器時間戳是UTC + 0,則會更容易。 – Nadh

回答

7

你可以做一個猜測的用戶時區與地理IP

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

或者你也可以使用JavaScript:

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

+0

這是我用的: var date = new Date(Date.UTC(year,month,day,hour,minute)); $( '#' +選擇器)的.html (? \t(date.getHours()> 9 date.getHours():('0' + date.getHours()))+ ':' + \t( date.getMinutes()> 9?date.getMinutes():('0'+ date.getMinutes())) ); 服務器從數據庫傳遞年,月,日,小時,分鐘。 –

-2

PHP是一種服務器端腳本語言,因此除非您使用GeoIP,否則您無法獲取訪問者的本地時間。您應該使用JavaScript代替。

0

我沒有洞察力,以如何在PHP中執行此操作,但由於您也在詢問JavaScript,因此可以使用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 */ 

對於全參考:http://www.w3schools.com/jsref/jsref_obj_date.asp

還要注意的是,這是當然,基於用戶的計算機時間設置。它不會根據他的網絡地址檢查用戶的全球位置。如果你真的想這樣做,然後不理我的答案:)

+0

我需要同樣的事情,但要根據服務器返回的時間戳計算出來。 –

1

如果你知道用戶的IP地址($ _SERVER ['REMOTE_ADDR']),你可以用PHP來完成。 。看看地球IP(http://php.net/manual/en/book.geoip.php)匹配的位置< - > IP地址

的IP地址不neccesary反映用戶的「真實」的位置,如果(例如),他/她的背後是一個代理。我在使用移動設備(GPRS/edge/3G/HSDPA)時也看到了一些奇怪的行爲。

+0

我將跳過地理位置跟蹤 - 這是不準確的,如果它位於我的服務器上並且大部分API都已付款,則需要大量空間和時間(在數據庫中)。我會尋找一種方法來使用javascript和服務器時間戳做到這一點。 –

0

正如其他答案所說,Javascript是正確的技術,但如果你堅持使用php,那麼你可以做的一種可能的方式是通過使用地理定位庫或服務來定位猜測來自IP的時區地址。

然而,這將永遠是一個最好的猜解,而且在許多情況下,IP地址的訪客來自哪裏,可能無法與時區的用戶目前在同意。

+0

如果必須,我已準備好使用JavaScript。正如您可能猜到的,我不想依靠地理位置跟蹤。 –

0

唯一可以保證的方式來顯示準確的在用戶PC上設置的時間是使用JavaScript。您可以嘗試服務器端地理位置檢測,但數據庫從來都不是完美的,或者用戶可能是來自絕對不同時區的某個提供商的遠程客戶端。發送你的時間戳作爲Unix紀元時間的秒數,然後用JavaScript初始化Date object,並使用它的.get(沒有UTC)方法檢索用戶本地表示的相應時間段。爲用戶提供使用某個特定時區的選項,以防他因某種原因想要重寫本地時間,這也是一個好主意。

相關問題