主要站点如何检测时区? [复制]

Posted

技术标签:

【中文标题】主要站点如何检测时区? [复制]【英文标题】:How are major sites detecting timezone? [duplicate] 【发布时间】:2011-12-03 12:25:04 【问题描述】:

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

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

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

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

我是php,基于zend-framework。

【问题讨论】:

看我的回答,它更准确一点。 :) 【参考方案1】:

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

但是使用 javascript 你可以获取客户端的时区偏移量,然后你可以发出 xmlhttp 请求将信息发送到 php

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

很简单!

希望对你有帮助

【讨论】:

@AdamSack 主要网站通过注册用户的信息检测时区,他们有自己的 geoip 数据库。 in plus darius 说在它的电脑上改变时间,变化被检测到,所以他们肯定使用 javascript。 我同意 @AdamSack 仍然为 Javascript +1 ;) 时区偏移量不是恒定的,它随着夏令时而变化,因此客户端使用的时区可能不明确。 IP、js 时区偏移和 js 语言环境的组合应该会产生更好的结果(你需要一个以某种方式组合所有这些的数据库)。【参考方案2】:

您可以找到用户国家/地区using IP address geocoding,然后为每个国家/地区创建一些包含时区的数组。我认为没有其他方法。 您可以像这样获取用户国家/地区:

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

然后只需将explode 用于$file

看看这些 *** 代码: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 寻址和地理位置。仅此而已。

【讨论】:

不,js ajax请求也是不错的选择【参考方案4】:

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

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

【讨论】:

【参考方案5】:

试试这个 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];?>

【讨论】:

为什么要投反对票?我看到两个缺点,如果提供商的服务器在另一个时区,使用 IP 可能会给出错误的时区,并且使用外部站点不好,因为我们不想依赖。感谢您的意见 我没有投反对票,但我认为您列出的两个理由是不使用它的相当有说服力的理由【参考方案6】:

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

【讨论】:

以上是关于主要站点如何检测时区? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 中将默认时区设置为用户的本地时区? [复制]

如何在 Linux Time 中更改时区? [复制]

如何更改 cPanel 日期时区? [复制]

如何在 Python 中获取或打印 GMT 时区的当前日期时间? [复制]

如何在python中获取时区感知午夜日期时间? [复制]

使用 JSON.NET 反序列化 DateTime 时如何保留时区? [复制]