猿问

如何获得客户的时区?

我正在使用Zend_Framework编写一个应用程序(因此解决方案可以依靠它)。


如何获得客户的时区?


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


(这不是格式的问题-我可以在俄罗斯圣彼得堡获得'Europe / Moscow'或'UTC-3',这是关于获得时区客户端的使用。但是最好以秒为单位的增量)


想到的唯一解决方案是让javascript为我获取本地时间并重定向。


德玛西亚99
浏览 453回答 3
3回答

四季花海

请查看有关如何通过JavaScript设置Cookie 来检测时区的文章,该 Cookie将保存客户端的时区。相当宽松,但这是因为它很冗长。我已经在自己的一个应用程序中按照这些路线实现了一个解决方案,并且效果很好。您还可以通过Ajax将时区发送到服务器,然后使其执行您需要执行的任何操作。或者,如果您不使用它进行任何服务器端计算,则只需在需要时应用时区客户端即可。真的取决于您的用例。除此之外,我建议您让访问者自己设置时区并将其存储在Cookie或会话中。

30秒到达战场

这是一个cookie解决方案,开销很小:&nbsp; echo <<<EOE&nbsp; &nbsp;<script type="text/javascript">&nbsp; &nbsp; &nbsp;if (navigator.cookieEnabled)&nbsp; &nbsp; &nbsp; &nbsp;document.cookie = "tzo="+ (- new Date().getTimezoneOffset());&nbsp; &nbsp;</script>EOE;&nbsp; if (!isset($_COOKIE['tzo'])) {&nbsp; &nbsp; echo <<<EOE&nbsp; &nbsp; &nbsp; <script type="text/javascript">&nbsp; &nbsp; &nbsp; &nbsp; if (navigator.cookieEnabled) document.reload();&nbsp; &nbsp; &nbsp; &nbsp; else alert("Cookies must be enabled!");&nbsp; &nbsp; &nbsp; </script>EOE;&nbsp; &nbsp; die();&nbsp; }&nbsp; $ts = new DateTime('now', new DateTimeZone('GMT'));&nbsp; $ts->add(DateInterval::createFromDateString($_COOKIE['tzo'].' minutes'));
随时随地看视频慕课网APP
我要回答