Val*_*lev 27 php timezone zend-framework
我正在使用Zend_Framework编写应用程序(因此解决方案可以依赖它).
如何获得客户的时区?
例如,如果有人在俄罗斯莫斯科,我想获得3*60*60(因为有UTC + 3).如果他在英国,我想要零.如果他使用UTC-3:30(加拿大?),我想要-3.5*60*60.
(这不是关于格式的问题 - 我对俄罗斯圣彼得堡获得'欧洲/莫斯科'或'UTC-3'是好的,而是让时区客户端使用.但是以秒为单位的delta是首选)
想到的唯一解决方案是让javascript获取本地时间并重定向.
Wes*_*y92 12
我用jQuery和PHP编写了一个函数.经过测试,确实有效!
在您希望将时区作为变量的PHP页面上,将此代码段放在页面顶部附近:
<?php
session_start();
$timezone = $_SESSION['time'];
?>
Run Code Online (Sandbox Code Playgroud)
这将读取会话变量"time",我们现在要创建它.
在同一页面上,您需要首先包含jQuery:
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
同样在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>
Run Code Online (Sandbox Code Playgroud)
您可能已经注意到或未注意到,但您需要将URL更改为您的实际域.
最后一件事.你可能想知道什么是timezone.php.嗯,就是这样:(创建一个名为timezone.php的新文件,并使用上面的url指向它)
<?php
session_start();
$_SESSION['time'] = $_GET['time'];
?>
Run Code Online (Sandbox Code Playgroud)
如果这样可以正常工作,它将首先加载页面,执行JavaScript并重新加载页面.然后,您将能够阅读$ timezone变量并将其用于您的乐趣!它返回当前的UTC/GMT时区偏移量(GMT -7)或您所在的任何时区.
查看本文,了解如何通过设置Cookie来保存客户端的时区来检测时区.它相当长,但那是因为它非常冗长.我已经在我自己的一个应用程序中实现了这些方面的解决方案,并且它运行良好.
您还可以通过Ajax将时区发送到服务器,并让它随时执行您需要的任何操作.或者,如果您没有使用它进行任何服务器端计算,只需在需要的地方应用时区客户端.真的取决于你的用例.
除此之外,我建议你让访问者自己设置他的时区并将其存储在Cookie或会话中.