用PHP猜测用户的TimeZone

时间:2010-08-16 23:06:32

标签: php timezone

从PHP5.3开始(我认为)需要在date.timezone文件中设置php.ini,或者通过date_default_timezone_set()函数在运行时设置。{{1}}。当你没有设置这个值时,你得到一个错误,就像这样:

  

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

我想知道它用什么机制来猜测时区,因为它看起来非常准确,而且我想亲自了解所以我可以以更友好的方式向用户呈现此错误,或允许他们接受这是正确的时区。

2 个答案:

答案 0 :(得分:8)

迈克的方法只能让你获得网络服务器的时区。 我相信你正试图获得用户的时区。 我用jQuery和PHP编写了一个函数。这已经过测试,确实有效!

在您希望将时区作为变量的PHP页面上,在页面顶部附近放置一段代码:

<?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>

您可能已经注意到或未注意到,但您需要将网址更改为您的实际域名。

最后一件事。你可能想知道什么是timezone.php。嗯,这只是这个: (创建一个名为 timezone.php 的新文件,并使用上述网址指向该文件)

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

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

干杯

</Westy92>

答案 1 :(得分:4)

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

string date_default_timezone_get  ( void  )
     

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

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

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