【发布时间】:2011-06-13 19:09:48
【问题描述】:
嘿,Stackfriends =P 我知道 time() 和 date() 函数, 但我想要实现的是,来自中国的用户比来自法国的用户显示的时间多。 我不能使用 JavaScript,因为我也在使用本地时间进行一些计算。
【问题讨论】:
-
Java 脚本与否,您不能信任来自客户端的数据。
嘿,Stackfriends =P 我知道 time() 和 date() 函数, 但我想要实现的是,来自中国的用户比来自法国的用户显示的时间多。 我不能使用 JavaScript,因为我也在使用本地时间进行一些计算。
【问题讨论】:
一种方法是使用 IP to City database from MaxMind 之类的东西 - 这可以为您提供用户 IP 地址的时区。
或者,只需询问用户他们喜欢哪个时区并将其记住在 cookie 或会话变量中。
【讨论】:
虽然我从未使用过它,但似乎有一些功能可以让您设置时区,还有其他日期功能可以告诉您当前时区设置与 GMT 之间的差异。这些可能会对您有所帮助。
【讨论】:
应该阻止您使用 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 日之后导致问题。
【讨论】:
有两个很好的解决方案:
显然,这在很大程度上取决于您的网站哪个选项是合适的。在像 stackoverflow 这样的网站上,使用选项 2 是最有意义的,因为有各种基于天的事件,因此所有用户的天数需要同时更改。
【讨论】: