如何使用jquery获取用户时区


How to get user timezone using jquery?

我想获得他们的时区,名称为"西亚/加尔各答">‘澳大利亚/达尔文’

我在myserver上安装了php,其时间设置为'UTC'

为了检测时区偏移,您可以使用以下函数:

function get_time_zone_offset( ) {
  var current_date = new Date();
  return parseInt(-current_date.getTimezoneOffset() / 60);
}

示例您可以在此处看到

这是我在这里的第一篇文章,但希望我能帮助别人。我觉得很有必要,因为这个网站帮了我很多。感谢stackoverflow会员!

http://www.pageloom.com/automatic-timezone-detection-with-javascript

根据我对这段JavaScript代码的了解,它非常准确,能够返回UST的偏移量,即相应的Olson数据库时区名称,并处理夏令时问题(例如-5:00,America/New_york,true(。

http://www.php.net/manual/en/timezones.america.php

上面的链接只是php支持的时区参数的列表,据我所知,这些参数与JavaScript代码一致(我相信这是有益的,我只是不知道为什么,但我仍在写我的代码,我对php/mysql有点陌生(。

在html页面上使用这些代码后,您将面临的唯一障碍可能是将这些值获取到php,然后再获取到mysql(如果您需要的话(。我通过使用JQuery将这些值作为$.post发送来实现这一点。我认为这是最简单的方法(如果我错了,请有人纠正我(。我相信其他的选择是使用AJAX命令(更复杂(或cookie(我认为是?(。

在我将Java脚本代码中的值发送到服务器(PHP(后,我将它们存储为会话变量,这样,如果我的网站上的用户从不同的时区登录,它们就会发生变化。然而,它们也可以很容易地保存到数据库中。

如果您使用JQuery路由,则需要在执行$.post的html文档的标头中。

 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>

最新的时区检测脚本可以在我发布的第一个url上找到链接。

//replace this comment with the most updated timezonedetect code from that first link
var timezone = jstz.determine_timezone();
var tzoffset = timezone.offset();
var tzname = timezone.name();
var tzdst = timezone.dst();
$.post("scripts/tzdetect.php", { tzoffset: tzoffset, tzname: tzname, tzdst: tzdst } );

如果您希望将数据存储为会话变量,那么本例中的接收文件tzdetect.php应该是这样的。

<?php
session_start();
$_SESSION['tzname'] = $_POST['tzname'];
$_SESSION['tzoffset'] = $_POST['tzoffset'];
$_SESSION['tzdst'] = $_POST['tzdst'];
?>

您的问题实际上是关于Javascript而不是PHP的,因为它取决于客户端的功能。

据我所知,Javascript允许您确定当前时区偏移量(UTC和本地时间之间的差异(,但不允许明确地确定时区。许多时区在任何一个特定的时间点都会共享相同的偏移量,但在其他时间点会有所不同,比如它们是否遵守夏令时,以及在什么时候变为夏令时。

如果您确实需要时区,您可能需要列出可能的时区列表,并将其呈现给用户,同时允许用户覆盖缩小范围的决定,选择任何的时区。

再说一遍,这真的取决于你想要实现什么。

您不需要jQuery来完成此操作。尝试以下代码:

var offset = (new Date()).getTimezoneOffset();
alert(offset);

它将提醒浏览器的当前时区偏移(以分钟为单位(。

把这个jsfiddle当作证据。

我认为您需要自己将其转换为时区名称。如果希望名称一致,则不应依赖于用户的浏览器。

您可以使用以下代码(请参阅jsfiddle(:

var offset = (new Date()).getTimezoneOffset();
var timezones = {
    '-12': 'Pacific/Kwajalein',
    '-11': 'Pacific/Samoa',
    '-10': 'Pacific/Honolulu',
    '-9': 'America/Juneau',
    '-8': 'America/Los_Angeles',
    '-7': 'America/Denver',
    '-6': 'America/Mexico_City',
    '-5': 'America/New_York',
    '-4': 'America/Caracas',
    '-3.5': 'America/St_Johns',
    '-3': 'America/Argentina/Buenos_Aires',
    '-2': 'Atlantic/Azores',
    '-1': 'Atlantic/Azores',
    '0': 'Europe/London',
    '1': 'Europe/Paris',
    '2': 'Europe/Helsinki',
    '3': 'Europe/Moscow',
    '3.5': 'Asia/Tehran',
    '4': 'Asia/Baku',
    '4.5': 'Asia/Kabul',
    '5': 'Asia/Karachi',
    '5.5': 'Asia/Calcutta',
    '6': 'Asia/Colombo',
    '7': 'Asia/Bangkok',
    '8': 'Asia/Singapore',
    '9': 'Asia/Tokyo',
    '9.5': 'Australia/Darwin',
    '10': 'Pacific/Guam',
    '11': 'Asia/Magadan',
    '12': 'Asia/Kamchatka' 
};
alert(timezones[-offset / 60]);

然而,我不会过于依赖这一点。

您可以获取时区偏移量。您可以使用它来计算近似时区。您可以保留时区偏移和names的关联列表。不过,这种方法并没有给出任何精确的值。

<?
echo date("e");
?>

这将给出输出:

亚洲/加尔各答