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

我希望他们的时区有‘亚洲/加尔各答’‘澳大利亚/达尔文’这样名字

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

这是我在这里的第一篇文章,但希望我可以帮助别人。 我感到被迫,因为这个网站对我帮助很大。 谢谢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路由,则需要在html文档的标题中执行$ .post。

 

可以在我发布的第一个url上找到最新的timezonedetect脚本。

 //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中的接收文件应如下所示。

  

要检测时区偏移,您可以使用此function:

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

你可以在这里看到的例子

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

据我了解,Javascript允许您确定当前时区偏移(UTC与本地时间之间的差异),但这不允许您明确地确定时区。 许多时区在任何一个特定时间点都会共享相同的偏移量,但在其他时间会有所不同,就是他们是否观察到夏令时以及他们在何时进入和避开夏令时。

如果您确实需要时区,您可能需要制定一个可能的时区列表,并将其呈现给用户 – 还允许他们覆盖缩小决策,选择任何时区。

再次,它真的取决于你想要实现的目标。

你不需要jQuery来做到这一点。 请尝试以下代码:

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

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

看到这个jsfiddle作为certificate 。

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

您可以使用此代码(请参阅此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的关联列表。 但是,此方法不会给出任何确切的值。