2011-10-08 75 views
16

Facebook,myspace,MSN,craigslist;所有檢測時區並正確顯示時間和日期,無需提交表單或重新加載頁面。主要網站如何檢測時區?

他們是怎麼做到的?我有一個非常大的網站,並有人發佈需要顯示正確時間的文章(根據時區上午3點或6點上傳)。

預加載器? JavaScript的?加載頁面並重新加載?我的網站目前已經有人進入網站,首次登錄時,它會通過javascript重新載入頁面及其時區的更新信息。然而,這是一件非常煩人的事情,我正在尋找另一種選擇。我知道,加載後,我可以發出一個Ajax請求,然後讓它更新整個網站的所有內容,併爲用戶提供正確的時區,但是如果我必須點擊返回,或者重新加載它,詢問我是否想再次發送信息這也不好。那麼他們如何做到這一點?

我正在玩Facebook,在我的本地機器上改變我的位置,它似乎每隔5分鐘左右更新一次時區。

我是PHP,基於zend框架。

+0

看到我的答案,它更加敏銳。 :) – pckabeer

回答

16

沒有 「時區」 請求頭,或類似的東西,所以,你不能用PHP

但你的JavaScript可以得到客戶端的時區偏移,然後你可以做一個xmlhttp請求發送信息到php

看到這個:http://www.pageloom.com/automatic-timezone-detection-with-javascript

很簡單!

希望這有助於

+1

@AdamSack主要網站通過註冊用戶的信息檢測時區,他們有他們自己的geoip數據庫。在加利福尼亞大流士說,改變其計算機的時間,檢測到的變化,所以他們肯定使用JavaScript。 – 2011-10-08 17:04:05

+0

我同意@AdamSack對Javascript仍爲+1;) –

+1

時區偏移量不是恆定的,它隨DST而變化,因此可能會模糊客戶端使用什麼時區。 IP,js時區偏移量和js語言環境的組合應該給出更好的結果(您需要一個將所有這些結合起來的數據庫)。 –

4

您可以找到用戶國家using IP address geocoding,然後爲每個國家/地區設置一些時區。我認爲沒有其他辦法。 您可以獲取用戶的國家是這樣的:

<?php 
$file = file_get_contents("http://api.hostip.info/get_html.php?ip=".$_SERVER['REMOTE_ADDR'].""); 
?> 

然後,只需使用explode$file

看也是這些代碼#1:
How can I determine a web user's time zone?
Any Reliable API available to determine User's city and country from IP address

3

我相信他們使用的IP地址和地理位置。這裏的所有都是它的。

+0

不,js阿賈克斯請求也不錯選項 –

1

試試這個PHP代碼可以得到較好的精度

<?php $ip = $_SERVER['REMOTE_ADDR']; 
    $json = file_get_contents("http://api.easyjquery.com/ips/?ip=".$ip."&full=true"); 
    $json = json_decode($json,true); 
    $timezone = $json[localTimeZone];?> 
+0

爲什麼一票反對呢?我看到兩個缺點,如果提供商的服務器位於另一個時區,使用IP可能會給出錯誤的時區,而使用外部網站並不好,因爲我們不想依賴它。感謝您的輸入,雖然 – Darius

+0

我沒有downvote,但我認爲你列出的兩個原因是相當令人信服的理由不使用它 – sricks

1

jsTimezoneDetect提供了通過JavaScript自動時區檢測一個偉大的圖書館。