PHP用户当地时间

时间:2011-01-22 19:49:43

标签: php localtime

嘿Stackfriends = P. 我知道time()和date()功能, 但我想要达到的目标是来自中国的用户得到的时间比来自法国的用户还要多。 我不能使用JavaScript,因为我也使用本地时间进行一些计算。

4 个答案:

答案 0 :(得分:3)

应该阻止你使用javascript的唯一原因是a)你只是在提供API并且无法控制页面内容;或b)客户端无论如何都阻止了javascript。通过javascript是最可靠的方法,而不是简单地提示用户输入他们的时区。

Cookie或ajax会起作用。为了更简单的cookie方式,将这个javascript放在任何页面的head部分中以添加cookie ...

<script>

d = new Date; 
gmtoffset = d.getTimezoneOffset() / 60;
document.cookie = 'gmtoffset=' + gmtoffset;

</script>

然后在PHP脚本中,阅读$_COOKIE['gmtoffset']以获取与GMT相关的时区。

恕我直言,客户的时间与时区应该是一个行业范围的标准请求标题。

编辑:从Cookie示例中删除了“过期”日期,因为它可能会在2012年1月1日之后导致问题。

答案 1 :(得分:1)

有两个好的解决方案:

  • 询问用户他的时区;根据大多数用户来自的时区和/或通过JavaScript检测到的本地时区预先选择默认值
  • 只需在您的网站上使用UTC(GMT)。

显然,这在很大程度上取决于您的网站哪个选项合适。在像stackoverflow这样的网站上使用选项2并且最有意义,因为有各种各样的事件都是基于日期的,因此所有用户需要同时更改日期。

答案 2 :(得分:0)

一种方法是使用像IP to City database from MaxMind这样的东西 - 这可以为用户提供IP地址的时区。

或者,只需询问用户他们喜欢什么时区,并在cookie或会话变量中记住它。

答案 3 :(得分:0)

虽然我从来没有使用它,但似乎有一些功能可以让你设置时区,而其他日期功能可以告诉你当前时区设置和GMT之间的区别。这些可能对你有帮助。

http://php.net/manual/en/datetime.settimezone.php

http://php.net/manual/en/function.date.php