关于php:主要网站如何检测时区?

How are major sites detecting timezone?

本问题已经有最佳答案,请猛点这里访问。

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

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

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

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

我是基于php,zend-framework的。


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

但使用javascript你可以得到客户端的时区偏移量,然后你可以发出一个xmlhttp请求发送信息到PHP

看到这个:http://www.pageloom.com/automatic-timezone-detection-with-javascript

满容易!

希望这可以帮助


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

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

然后只需使用explode作为$file

另请参阅以下Stackoverflow代码:
如何确定网络用户的时区?
任何可靠的API可用于从IP地址确定用户的城市和国家/地区


我相信他们使用IP寻址和地理位置。这里的所有都是它的。


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

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


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


尝试这个PHP代码,这提供了更好的精度

1
2
3
4
  <?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];?>