Facebook,myspace,MSN,craigslist;所有检测时区并正确显示时间和日期,而无需提交表格或重新加载页面。
他们是怎么做到的?我有一个非常大的网站,人们发布需要显示正确时间的文章(根据时区上传至下午3点或下午6点)。
预加载? JavaScript的?加载页面并重新加载?我的网站目前有人进入该网站,并在第一次进入时通过javascript重新加载页面,其中包含其时区的更新信息。然而,这是一个非常讨厌的事情,我正在寻找另一种选择。我知道在加载时我可以发出一个ajax请求然后让它更新整个站点的所有内容,并为用户提供正确的时区但是如果我必须单击返回,或者重新加载它询问我是否要再次发送信息这也很糟糕。那他们怎么做呢?
我正在玩Facebook,改变我在本地机器上的位置,似乎每5分钟更新一次。
我是php,基于zend-framework。
答案 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自动检测时区。