为了账号安全,请及时绑定邮箱和手机立即绑定

如何获得客户的时区?

如何获得客户的时区?

PHP
德玛西亚99 2019-10-31 12:58:46
我正在使用Zend_Framework编写一个应用程序(因此解决方案可以依靠它)。如何获得客户的时区?例如,如果有人在俄罗斯莫斯科,我想得到3 * 60 * 60(因为有UTC + 3)。如果他在英国,我要零。如果他使用UTC-3:30(加拿大?),我要-3.5 * 60 * 60。(这不是格式的问题-我可以在俄罗斯圣彼得堡获得'Europe / Moscow'或'UTC-3',这是关于获得时区客户端的使用。但是最好以秒为单位的增量)想到的唯一解决方案是让javascript为我获取本地时间并重定向。
查看完整描述

3 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

请查看有关如何通过JavaScript设置Cookie 来检测时区的文章,该 Cookie将保存客户端的时区。相当宽松,但这是因为它很冗长。我已经在自己的一个应用程序中按照这些路线实现了一个解决方案,并且效果很好。


您还可以通过Ajax将时区发送到服务器,然后使其执行您需要执行的任何操作。或者,如果您不使用它进行任何服务器端计算,则只需在需要时应用时区客户端即可。真的取决于您的用例。


除此之外,我建议您让访问者自己设置时区并将其存储在Cookie或会话中。


查看完整回答
反对 回复 2019-10-31
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

这是一个cookie解决方案,开销很小:


  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'));


查看完整回答
反对 回复 2019-10-31
  • 3 回答
  • 0 关注
  • 452 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信