Php 如何使用jquery获取用户时区?

Php 如何使用jquery获取用户时区?,php,jquery,timezone,Php,Jquery,Timezone,我想得到他们的时区名称,如“亚洲/加尔各答”或“澳大利亚/达尔文” 我已经在myserver上安装了php,并且它的时间设置为“UTC”您可以获得。您可以使用它来计算大致的时区。您可以保留时区偏移和名称的关联列表。 但是,此方法不会给出任何精确值。 <? echo date("e"); ?> 这将提供以下输出: 亚洲/加尔各答您的问题实际上是关于Javascript而不是PHP的,因为它取决于客户端功能 据我所知,Javascript允许您确定当前时区偏移量(UTC和本地时间之间

我想得到他们的时区名称,如“亚洲/加尔各答”或“澳大利亚/达尔文”

我已经在myserver上安装了php,并且它的时间设置为“UTC”

您可以获得。您可以使用它来计算大致的时区。您可以保留时区偏移和
名称的关联列表。
但是,此方法不会给出任何精确值。


<?
echo date("e");
?>
这将提供以下输出:


亚洲/加尔各答

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

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

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


同样,这实际上取决于您试图实现的目标。

您不需要jQuery来实现这一点。请尝试以下代码:

var offset = (new Date()).getTimezoneOffset();
alert(offset);
它将从浏览器发出当前时区偏移的警报(以分钟为单位)

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

您可以使用此代码(请参阅):


但是,我不会太依赖它。

要检测时区偏移,您可以使用以下功能:

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

你可以看到的例子这是我在这里的第一篇文章,但希望我能帮助别人。我觉得很有必要,因为这个网站帮了我很多。谢谢各位

据我对这段JavaScript代码的了解,它非常准确,能够返回UST的偏移量,相应的奥尔森数据库时区名称,并处理夏令时问题(例如-5:00,美国/纽约,真的)

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

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

从Java脚本代码到服务器(PHP)获取值后,我将它们存储为会话变量,这样,如果我的站点上的用户从不同的时区登录,它们就会改变。但是,它们也可以很容易地保存到数据库中

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

 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
如果希望将数据存储为会话变量,则本例中的接收文件tzdetect.php应该如下所示

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


我需要浏览器时区,而不是服务器您无法从时区偏移量计算出时区。你可以列出一个可能的时区列表,但可能不止一个。你说“不需要”,但这完全取决于OP需要做什么。例如,要计算出10分钟内的当地时间,时区偏移是不够的。@JonSkeet谢谢!你完全正确,你只能从偏移量得到大致的时区。编辑答案。我在哪里可以得到存储在php数组中的时区列表?假设偏移量为“new Date().getTimezoneOffset()/60”。该值在我的数组中可用吗?@user967144:在哪个数组中?你问的不是很清楚。要确定可能的时区,您应该迭代所有时区,并找到具有相同偏移量的时区。你可以使用找到所有时区。我在这里找到了一个链接。你能看看BrightNail发布的功能吗?codingforums.com/showthread.php?t=139888@user967144:这既不完整也不权威。可以有多个时区具有相同的日光偏移,相同的标准偏移,但在不同的时间变化。那么,最好的方法是什么?我真正想要的是知道浏览器的时区名称,这样我就可以修改我的时间表。我必须需要时区名称,因为我在phpnice中使用DateTime函数,它会提醒“-330”。。现在我如何修改它以显示“亚洲/加尔各答”?@user967144:请参阅更新版本,现在会弹出您期望的名称。@user967144:不,它不可靠-它基于偏移量,因此时区将根据夏令时是否生效而改变。但如果您希望依赖浏览器中的数据,我看不到其他选项。这是最好的解决方案。另一种方法是将计算机时间戳(使用javascript中的日期)与来自服务器的时间戳进行比较。然后,您可以计算差异。我见过这个函数
getTimezoneOffset()
时不时地失败,它不是“不可靠”,而是完全错误的。时区是应用于某一地区的一组规则。时间偏移取决于一年中的时间和当前的一套规则(例如,俄罗斯最近放弃了夏令时)。无法仅从一个偏移量猜测时区。jstz在这方面做得非常好,而且它做了更多的探索。
//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 } );
<?php
session_start();
$_SESSION['tzname'] = $_POST['tzname'];
$_SESSION['tzoffset'] = $_POST['tzoffset'];
$_SESSION['tzdst'] = $_POST['tzdst'];
?>