如何获得客户的时区?

我使用Zend_Framework写一个应用程序(所以解决scheme可以依靠它)。

如何获得客户的时区?

例如,如果有人在俄罗斯莫斯科,我想得到3 * 60 * 60(因为有UTC + 3)。 如果他在英国,我想零。 如果他使用UTC-3:30(加拿大?),我想要-3.5 * 60 * 60。

(这不是一个关于格式的问题 – 我可以在俄罗斯圣彼得堡获得“欧洲/莫斯科”或“UTC-3”,这是为了获得时区客户端的使用。

想到的唯一的解决办法是让javascript获得本地时间和redirect。

看看这篇关于如何通过设置一个Cookie 来检测时区文章,这个 JavaScript会保存客户端的时区。 这是相当长的,但那是因为它非常冗长。 我已经在我自己的一个应用程序中沿着这些线路实施了一个解决scheme,并且工作得很好。

您也可以通过Ajax将时区发送到服务器,然后让它做任何您需要的操作。 或者,如果您没有对其进行任何服务器计算,只需在需要时应用时区客户端。 真的取决于你的用例。

除此之外,我build议你让访问者自己设置时区并将其存储在Cookie或Session中。

我用jQuery和PHP编写了一个函数。 这是testing,并且工作!

在你想把时区作为variables的PHP页面上,在这个页面的顶部附近有这段代码:

<?php session_start(); $timezone = $_SESSION['time']; ?> 

这将读取会议variables“时间”,我们现在要创build。

在同一页面上,你需要首先包含jQuery:

 <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> 

另外,在jQuery下面,粘贴这个:

 <script type="text/javascript"> $(document).ready(function() { if("<?php echo $timezone; ?>".length==0){ var visitortime = new Date(); var visitortimezone = "GMT " + -visitortime.getTimezoneOffset()/60; $.ajax({ type: "GET", url: "http://domain.com/timezone.php", data: 'time='+ visitortimezone, success: function(){ location.reload(); } }); } }); </script> 

您可能注意到,也可能没有注意到,但是您需要将url更改为您的实际域。

最后一件事。 你可能想知道什么是timezone.php。 那么,这只是:(创build一个名为timezone.php的新文件,并用上面的url指向它)

 <?php session_start(); $_SESSION['time'] = $_GET['time']; ?> 

如果这个工作正常,它将首先加载页面,执行JavaScript,并重新加载页面。 然后,您将能够阅读$ timezonevariables并使用它来享受您的乐趣! 它返回当前的UTC / GMT时区偏移量(GMT -7)或者你所在的任何时区。

这是一个很less开销的cookie解决scheme:

  echo <<<EOE <script type="text/javascript"> if (navigator.cookieEnabled) document.cookie = "tzo="+ (- new Date().getTimezoneOffset()); </script> EOE; if (!isset($_COOKIE['tzo'])) { echo <<<EOE <script type="text/javascript"> if (navigator.cookieEnabled) document.reload(); else alert("Cookies must be enabled!"); </script> EOE; die(); } $ts = new DateTime('now', new DateTimeZone('GMT')); $ts->add(DateInterval::createFromDateString($_COOKIE['tzo'].' minutes')); 

我认为你最好的select是根据客户发送的Accept-Language头来猜测。