【问题标题】:Guessing User's TimeZone in PHP在 PHP 中猜测用户的时区
【发布时间】:2011-03-30 17:07:41
【问题描述】:

从 PHP5.3(我认为)开始,date.timezone 需要在 php.ini 文件中设置,或者在运行时通过 date_default_timezone_set() 函数设置。如果您不设置此值,则会出现错误,类似于以下内容:

PHP 警告:date():依赖系统的时区设置是不安全的。您必须使用 date.timezone 设置或 date_default_timezone_set() 函数。如果您使用了这些方法中的任何一种,但仍然收到此警告,您很可能拼错了时区标识符。我们在 LINE 行的 FILE 中选择了“America/New_York”作为“-4.0/DST”。

我想知道它使用什么机制来猜测时区,因为它似乎非常准确,我想自己知道,以便我可以以更友好的方式向用户呈现此错误,或者让他们接受这是正确的时区。

【问题讨论】:

  • 我知道这并不明显,但 我不是 这样做是为了 Web 开发。在这个实例中,我在客户端桌面上运行的应用程序中使用 PHP。

标签: php timezone


【解决方案1】:

Mike 的方法只能获取 Web 服务器的时区。 我相信您正在尝试获取用户的时区。 我使用 jQuery 和 PHP 编写了一个函数。这是经过测试的,并且确实有效!

在您希望将时区作为变量的 PHP 页面上,将这段 sn-p 代码放在页面顶部附近的某处:

<?php    
    session_start();
    $timezone = $_SESSION['time'];
?>

这将读取我们现在要创建的会话变量“time”。

在同一个页面中,你需要首先包含jQuery:

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>

同样在 jQuery 下方,粘贴以下内容:

<script type="text/javascript">
    $(document).ready(function() {
        if("<?php echo $timezone; ?>".length==0){
            var visitortime = new Date();
            var visitortimezone = "GMT " + -visitortime.getTimezoneOffset()/60;
            $.ajax({
                type: "GET",
                url: "http://domain.com/timezone.php",
                data: 'time='+ visitortimezone,
                success: function(){
                    location.reload();
                }
            });
        }
    });
</script>

您可能注意到也可能没有注意到,但您需要将 url 更改为您的实际域。

最后一件事。您可能想知道 timezone.php 到底是什么。嗯,就是这样: (创建一个名为 timezone.php 的新文件并用上面的 url 指向它)

<?php
    session_start();
    $_SESSION['time'] = $_GET['time'];
?>

如果这工作正常,它将首先加载页面,执行 JavaScript,然后重新加载页面。然后,您将能够读取 $timezone 变量并随意使用它!它返回当前的 UTC/GMT 时区偏移量 (GMT -7) 或您所在的任何时区。

干杯

&lt;/Westy92&gt;

【讨论】:

  • 这很酷。我不是在寻找客户的时区,但我将在我的另一个项目中使用此代码。非常好的工作。
  • 返回用户当前的时区偏移量。如果你想猜测用户当前的时区,那么你必须做一些更精细的事情,比如jsTimeZoneDetect。
【解决方案2】:

我可能会使用date_default_timezone_get() 函数:

string date_default_timezone_get  ( void  )

按优先顺序,此功能 通过以下方式返回默认时区:

  • 使用 date_default_timezone_set() 读取时区设置 功能(如果有)
  • 读取 TZ 环境变量(如果非空)(PHP 之前 5.3.0)
  • 读取 date.timezone ini 选项的值(如果已设置)
  • 查询主机操作系统(如果支持并允许 操作系统)

http://www.php.net/manual/en/function.date-default-timezone-get.php

【讨论】:

  • 没关系。每个人都有脑子放屁,看看我的问题清单! ;)
猜你喜欢
  • 2019-06-30
  • 2017-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多