主要站点如何检测时区?

时间:2011-10-08 10:32:24

标签: php javascript zend-framework timezone

Facebook,myspace,MSN,craigslist;所有检测时区并正确显示时间和日期,而无需提交表格或重新加载页面。

他们是怎么做到的?我有一个非常大的网站,人们发布需要显示正确时间的文章(根据时区上传至下午3点或下午6点)。

预加载? JavaScript的?加载页面并重新加载?我的网站目前有人进入该网站,并在第一次进入时通过javascript重新加载页面,其中包含其时区的更新信息。然而,这是一个非常讨厌的事情,我正在寻找另一种选择。我知道在加载时我可以发出一个ajax请求然后让它更新整个站点的所有内容,并为用户提供正确的时区但是如果我必须单击返回,或者重新加载它询问我是否要再次发送信息这也很糟糕。那他们怎么做呢?

我正在玩Facebook,改变我在本地机器上的位置,似乎每5分钟更新一次。

我是php,基于zend-framework。

6 个答案:

答案 0 :(得分:16)

没有“时区”请求标头,或类似的东西,所以,你不能用PHP

但是使用javascript你可以获得客户端的时区偏移量,那么你可以发出一个xmlhttp请求来向php发送信息

请参阅:http://www.pageloom.com/automatic-timezone-detection-with-javascript

非常简单!

希望这会有所帮助

答案 1 :(得分:4)

您可以找到用户国家/地区using IP address geocoding,然后为每个国家/地区设置一些带时区的阵列。我认为没有别的办法。 您可以像这样获取用户所在国家/地区:

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

然后只需explode使用$file

另请参阅这些Stackoverflow代码:
How can I determine a web user's time zone?
Any Reliable API available to determine User's city and country from IP address

答案 2 :(得分:3)

我相信他们使用IP寻址和地理位置。这就是它的全部内容。

答案 3 :(得分:2)

首先,您应该在所有级别使用UTC,如果您不知道时区,请标记时间。然后在本地客户端上,您可以使用timezoneOffset

调整时间

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset

答案 4 :(得分: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];?>

答案 5 :(得分:1)

jsTimezoneDetect提供了一个很棒的库,可以通过javascript自动检测时区。