从PHP5.3开始(我认为)需要在date.timezone
文件中设置php.ini
,或者通过date_default_timezone_set()
函数在运行时设置。{{1}}。当你没有设置这个值时,你得到一个错误,就像这样:
PHP警告:date():依赖系统的时区设置是不安全的。您必需使用date.timezone设置或date_default_timezone_set()函数。如果您使用了这些方法中的任何一种并且仍然收到此警告,则很可能拼错了时区标识符。我们在 行 行 的 文件 中选择'America / New_York'作为'-4.0 / DST'。 / p>
我想知道它用什么机制来猜测时区,因为它看起来非常准确,而且我想亲自了解所以我可以以更友好的方式向用户呈现此错误,或允许他们接受这是正确的时区。
答案 0 :(得分:8)
迈克的方法只能让你获得网络服务器的时区。 我相信你正试图获得用户的时区。 我用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>
您可能已经注意到或未注意到,但您需要将网址更改为您的实际域名。
最后一件事。你可能想知道什么是timezone.php。嗯,这只是这个: (创建一个名为 timezone.php 的新文件,并使用上述网址指向该文件)
<?php
session_start();
$_SESSION['time'] = $_GET['time'];
?>
如果这样可以正常工作,它将首先加载页面,执行JavaScript并重新加载页面。然后,您将能够阅读$ timezone变量并将其用于您的乐趣!它返回当前的UTC / GMT时区偏移量(GMT -7)或您所在的任何时区。
干杯
</Westy92>
答案 1 :(得分:4)
我可能会使用date_default_timezone_get()
函数:
string date_default_timezone_get ( void )
按优先顺序,此功能 通过以下方式返回默认时区:
- 使用date_default_timezone_set()读取时区集 功能(如果有的话)
- 读取TZ环境变量(如果非空)(在PHP之前) 5.3.0)
- 读取date.timezone ini选项的值(如果已设置)
- 查询主机操作系统(如果支持并允许) OS)
http://www.php.net/manual/en/function.date-default-timezone-get.php