【问题标题】:Detect TIMEZONE with jQuery and combined with PHP用jQuery检测TIMEZONE并结合PHP
【发布时间】:2017-02-17 21:04:11
【问题描述】:

我想将 UTC 时间转换为实际用户时区。 通过PHP实现是做不到的。所以我将jQuery和PHP结合在一起。

我附上我写的代码。不幸的是,出了点问题,但我不知道问题出在哪里。

提前致谢。

    if(isset($_SESSION['timezone'])){

    } else if(isset($_REQUEST['hiddenval'])) {

        $_SESSION['timezone'] = $_REQUEST['hiddenval'];
        header('Location: ' . $url);

    } else {
echo '<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
    <script type="text/javascript" src="//pellepim.bitbucket.org/jstz/jstz.min.js">
    </script>
    <script type="text/javascript">
      $(document).ready(function(){
    var timezone = jstz.determine_timezone();
        document.getElementById("hiddenVal").value = timezone.name();
     </script>';
    }

    echo $_SESSION['timezone'];

来源:http://pellepim.bitbucket.org/jstz/

【问题讨论】:

    标签: php jquery session timezone timezone-offset


    【解决方案1】:

    要在 JavaScript 中获取时区,您应该使用。

    Intl.DateTimeFormat().resolvedOptions().timeZone
    

    您为什么要尝试使用隐藏变量?

    1.使用 Cookie

    JavaScript 代码

    function createCookie(name,value,days) {
        if (days) {
            var date = new Date();
            date.setTime(date.getTime()+(days*24*60*60*1000));
            var expires = "; expires="+date.toGMTString();
        }
        else var expires = "";
        document.cookie = name+"="+value+expires+"; path=/; domain=.example.com";
    }
    
    createCookie('cookieee','client_timezone', Intl.DateTimeFormat().resolvedOptions().timeZone);
    

    PHP 代码

    print_r($_COOKIE);
    

    2。使用会话

    • 您可以在$(document).ready 上使用$.ajax() 将正确的时区值发送到您的PHP 文件。
    • 在 PHP 中,如果未设置会话变量,则通过 Ajax 请求进行设置。
    • 不要忘记在 PHP 第一行使用 session_start()

    参考文档

    console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)

    【讨论】:

    • 您好,感谢您的完整回答。如果我想使用 SESSION 而不是 cookie,您能否在您的答案中添加我需要做的事情。 TIA
    • 只需检查您的 php 文件的第一行中有 session_start(),您从 js 中获得正确的值,并且会话在重定向之前设置正确吗?
    • 只需一步一步调试您的代码,您是否获得正确的时区并且它在隐藏变量上正确设置,或者我建议使用 Ajax 调用来获取时区值并在页面时在会话中设置准备好了。
    【解决方案2】:

    通过会话:

    <?php
    session_start();
    if(isset($_SESSION['timezone'])){
        echo 'User timezone: ' . $_SESSION['timezone'];
    } else if(isset($_REQUEST['timezone'])) {
        $_SESSION['timezone'] = $_REQUEST['timezone'];
    
        header('Location: ' . $_SERVER['PHP_SELF']);
    } else {
        echo '<script type="text/javascript">window.location = "' . $_SERVER['PHP_SELF'] . '?timezone="+Intl.DateTimeFormat().resolvedOptions().timeZone;</script>';
    }
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      相关资源
      最近更新 更多