如何根据访问者的位置显示本地化时间?

时间:2012-05-02 14:43:24

标签: php javascript localization timezone

我们正在开发一个网站,将用于世界各地的人们。网站上有一个聊天部分,我们希望这些消息带有时间戳。我在数据库中存储每条消息的时间戳。

根据当地时间,向访客显示每条消息的正确时间的方法是什么。

我不想问用户他的时区。有没有办法做到这一点,只使用PHP?如果不是 - 根据访问者的当前时间,使用javascript显示当前时间的方式是什么?

7 个答案:

答案 0 :(得分:7)

您可以使用地理IP对用户时区进行有根据的猜测

http://php.net/manual/en/book.geoip.php

或者您可以使用javascript:

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

答案 1 :(得分:1)

如果您知道用户的IP地址($ _SERVER ['REMOTE_ADDR']),则可以使用PHP完成此操作。 查看Geo-IP(http://php.net/manual/en/book.geoip.php)以获取匹配位置< - > ip-address

如果(例如)他/她在代理后面,则IP地址不需要反映用户的“真实”位置。我在使用移动设备(GPRS / edge / 3G / HSDPA)时也看到了一些奇怪的行为。

答案 2 :(得分:0)

我不知道如何在PHP中执行此操作,但由于您也在询问javascript,因此可以使用Date对象。

var d = new Date();  // creates a Date object and initializes it with
                     // user's current time

d.getTimezoneOffset();  // time zone offset in minutes

d.getDay();
d.getHours();

/* etc... gets information about the user's local time */

完整参考:http://www.w3schools.com/jsref/jsref_obj_date.asp

另请注意,这当然是基于用户的计算机时间设置。它不会根据用户的网络地址检查用户的全球位置。如果你真的想这样做,那么忽略我的答案:)

答案 3 :(得分:0)

正如其他答案所说,Javascript是正确的技术,但是如果你坚持使用php,那么你可以做的一种可能的方法是使用地理定位库或服务来定位从IP地址猜测时区

然而,这将始终是最佳猜测解决方案,并且在许多情况下,访问者来自的IP地址,可能不同意用户当前所在的时区。

答案 4 :(得分:0)

准确显示在用户PC上设置的时间的唯一保证方法是使用JavaScript。您可以尝试服务器端地理检测,但数据库永远不会完美,或者用户可能是来自绝对不同时区的某个提供商的远程客户端。从Unix纪元时间以秒为单位发送您的时间戳,然后在此时用JavaScript初始化Date object并使用其.get(无UTC)方法在用户的本地表示中检索相应的时间段。为用户提供使用某些特定时区的选项,以防他出于某种原因想要覆盖当地时间也是一个好主意。

答案 5 :(得分:0)

如果有人想在访问者的系统时区中显示PHP时间

<?php
$now = new DateTime();
$date_created=$now->format('Y-m-d H:i:s');
$contents = htmlentities("<script>var x=new Date('$date_created' +'+0000');document.write(x.getMonth() + '-' + x.getDate() + '-' + x.getFullYear()+ ' ' + x.getHours() + ':' + x.getMinutes());</script>");
echo html_entity_decode($contents);
?>

这将显示访问者所在时区的服务器时间。如果您将服务器时间设置为UTC +00。如果有人要更改格式,可以使用此javascript函数

  function detectAmPm(hours, min) {
        let time;
        if (hours >= 12) {
            time = "PM";
            hours = hours - 12
        } else {
            time = "AM";
        }

        if (hours < 10) {
            hours = "0" + hours;
        }
        if (min < 10) {
            min = "0" + min;
        }

        return {min: min, hours: hours, time: time};
    }

答案 6 :(得分:-2)

PHP是一种服务器端脚本语言,因此除非使用GeoIP,否则无法获得访问者的本地时间。你应该使用JavaScript。