使用 jQuery 检测 TIMEZONE 并结合 PHP

Detect TIMEZONE with jQuery and combined with PHP

我想从 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/

要获得 JavaScript 的时区,您应该使用。

Intl.DateTimeFormat().resolvedOptions().timeZone

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

1. Using Cookie

Javscript 代码

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. Using Session

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

参考文档

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

通过会话:

<?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>';
}
?>