如何允许用户更改时区,但保持在同一页面上


How to allow a user to change timezone, but stay on the same page

基本上,我需要用户能够更改时区,但要让他们保持在同一页面上。原因是,我使用的是jQuery/ajax页面加载器脚本,当我使用form/php时,我目前只有它转到实际的php文件(php文件工作正常)。我只需要它留在页面上。

以下是页面的代码:

<?php
date_default_timezone_set($_POST['timezones']);
?>
<form action="data4.php" method="post">
<select name="timezones">
  <option>Select your timezone</option>
  <option value="Europe/London">Europe/London</option>
  <option value="America/Mexico_City">Central</option>
  <option value="America/New_York">Eastern</option>
</select>
<input type="submit" value="Submit" />
</form>

我确实计划添加更多时区,这只是为了演示。

如果有人有一些有用的信息/帮助,我将不胜感激。

这里有一种方法。

<!doctype html>
<html>
    <head>
<?php
        session_start();
        if(!isset($_SESSION['timezone'])) {
            if(!isset($_REQUEST['offset'])) {
?>
        <script type="text/javascript">
            var d = new Date()
            var offset= -d.getTimezoneOffset()/60;
            location.href = "<?php echo $_SERVER['PHP_SELF']; ?>?offset="+offset;
        </script>
<?php
            } else {
                $zonelist = array('Kwajalein' => -12.00, 'Pacific/Midway' => -11.00, 'Pacific/Honolulu' => -10.00, 'America/Anchorage' => -9.00, 'America/Los_Angeles' => -8.00, 'America/Denver' => -7.00, 'America/Tegucigalpa' => -6.00, 'America/New_York' => -5.00, 'America/Caracas' => -4.30, 'America/Halifax' => -4.00, 'America/St_Johns' => -3.30, 'America/Argentina/Buenos_Aires' => -3.00, 'America/Sao_Paulo' => -3.00, 'Atlantic/South_Georgia' => -2.00, 'Atlantic/Azores' => -1.00, 'Europe/Dublin' => 0, 'Europe/Belgrade' => 1.00, 'Europe/Minsk' => 2.00, 'Asia/Kuwait' => 3.00, 'Asia/Tehran' => 3.30, 'Asia/Muscat' => 4.00, 'Asia/Yekaterinburg' => 5.00, 'Asia/Kolkata' => 5.30, 'Asia/Katmandu' => 5.45, 'Asia/Dhaka' => 6.00, 'Asia/Rangoon' => 6.30, 'Asia/Krasnoyarsk' => 7.00, 'Asia/Brunei' => 8.00, 'Asia/Seoul' => 9.00, 'Australia/Darwin' => 9.30, 'Australia/Canberra' => 10.00, 'Asia/Magadan' => 11.00, 'Pacific/Fiji' => 12.00, 'Pacific/Tongatapu' => 13.00);
                $index = array_keys($zonelist, $_REQUEST['offset']);
                $_SESSION['timezone'] = $index[0];
            }
        }
        date_default_timezone_set($_SESSION['timezone']);
?>
    </head>
    <body>
        Current Time Zone is <?php echo $_SESSION['timezone']; ?>
    </body>
</html>

基本上,它的工作原理非常简单,您可以让此脚本成为页面执行的第一件事,因为时区将保留在会话中。

从 session_start() 开始;它将首先检查 SESSION 中是否有时区变量,如果没有,它将检查 REQUEST for 和 offset 变量。如果没有,它将使用 JavaScript 并使用它从浏览器中检测到的正确时区重新加载页面,方法是使用 $_GET 方法检查偏移量(将返回 -12 到 +12)并与数组匹配。最后,它将默认date_time_zone设置为检测到的JavaScript和您的全部设置。您可以让它显示时区。

希望有帮助

一种方法是 - 您可以触发 ajax 请求,当时区更改时,从后端时区将被更改。但是,如果需要在同一页面中的某个时间进行更改,则需要使用 ajax 刷新该部分。

在下拉列表中添加一个类,名称为change_time_zone_trigger

<select name="timezones" class="change_time_zone_trigger">
<option>Select your timezone</option>
<option value="Europe/London">Europe/London</option>
<option value="America/Mexico_City">Central</option>
<option value="America/New_York">Eastern</option>
</select>

然后在 evner 单击任何时区时创建一个触发器。

$(document).ready(function() {
  $('body').delegate('.change_time_zone_trigger', 'change', function(evt) {
    // here put your ajax code that will hit the server when ever any timezone will be changed.
  });
});