我正在使用Zend_Framework编写一个应用程序(所以解决方案可以依赖它)。
如何获取客户端的时区?
例如,如果有人在俄罗斯莫斯科,我想得到3*60*60 (因为有UTC+3)。如果他在英国,我想要零。如果他使用UTC-3:30 (加拿大?),我想要-3.5*60*60。
(这不是格式的问题-我对俄罗斯圣彼得堡的“欧洲/莫斯科”或“UTC-3”没有意见,而是关于让客户使用时区的问题。但最好是以秒为单位的增量)
我想到的唯一解决方案就是让javascript为我获取本地时间,然后重定向。
发布于 2011-04-10 03:42:52
我用jQuery和PHP写了一个函数。这是经过测试的,并且确实有效!
在想要将时区作为变量的PHP页面上,将以下代码片段放在页面顶部附近的某个位置:
<?php
session_start();
$timezone = $_SESSION['time'];
?>这将读取我们现在将要创建的会话变量"time“。
在同一页的中,您首先需要包含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到底是什么。嗯,它很简单:(创建一个名为timezone.php的新文件,并使用上面的url指向它)
<?php
session_start();
$_SESSION['time'] = $_GET['time'];
?>如果运行正常,它将首先加载页面,执行JavaScript,然后重新加载页面。然后,您将能够读取$timezone变量并随意使用它!它返回当前的UTC/GMT时区偏移(GMT -7)或您所在的任何时区。
发布于 2014-04-03 07:10:22
这是一个开销很小的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'));发布于 2009-12-15 13:51:43
我认为您最好的选择是根据客户端发送过来的Accept-Language头进行猜测。
https://stackoverflow.com/questions/1905397
复制相似问题