如何自动检测用户的时区?

时间:2011-03-05 11:02:51

标签: php timezone

我正在创建一个Web应用程序,如果用户注册,我们将显示创建的日期。

为此我们在我的sql表中使用当前时间戳。它显示服务器Time.But我们不知道如何根据用户时区转换时间。

因为我们未获得用户的国家/地区

可以帮助我解决它吗

提前致谢:)

5 个答案:

答案 0 :(得分:23)

使用javascript解决方案

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

演示应在选择框中显示您的时区。

http://onlineaspect.com/examples/timezone/index.html (死链接)

答案 1 :(得分:8)

您无法在服务器端获取用户的时区,只能在客户端猜测它。

如果您依赖获取用户的IP地址,那么您可以对其进行地理定位并推断出时间。

通常这样做的方法是询问用户(例如他们注册时)他们所在的时区,然后在计算时间中使用它。

答案 2 :(得分:4)

对于地理位置,您可以使用http://ipinfodb.com/,与API配合使用!

function GeoLocation($precision='city',$ip,$api) {

    if($precision == "country") {
        $file = "ip_query_country.php";
    }
    else {
        $file = "ip_query.php";
    }

    $params = @file_get_contents("http://api.ipinfodb.com/v2/ip_query.php?key=".$api."&ip=".$ip."&timezone=true");
    $fields = @new SimpleXMLElement($params);
    foreach($fields as $field => $val) {
        $result[(string)$field] = (string)$val;
    }
    return $result;
}

答案 3 :(得分:2)

通过小的“作弊”(使用客户端脚本)并将结果发布到您的服务器,您可以访问客户端的时区。

例如,您可以使用此JavaScript库:

https://bitbucket.org/pellepim/jstimezonedetect

var tz = jstz.determine(); // Determines the time zone of the browser client
tz.name(); // Returns the name of the time zone eg "Europe/Berlin"

演示:http://pellepim.bitbucket.org/jstz/

答案 4 :(得分:1)

最可靠的方法是要求用户设置自己的时区。我认为最好在自己的数据库中创建用户帐户的时间戳,以供自己使用。

以下是设置用户时区的步骤:

1-保留您自己使用的时间戳列
2-为实际用户时区添加新列
3-使用javascript检索时区:
new Date().getTimezoneOffset()/60;<br/>
4-还允许用户设置自己的时区

您还可以更进一步,使用地理位置服务来检测用户时区。