【问题标题】:PHP users local timePHP用户当地时间
【发布时间】:2011-06-13 19:09:48
【问题描述】:

嘿,Stackfriends =P 我知道 time() 和 date() 函数, 但我想要实现的是,来自中国的用户比来自法国的用户显示的时间多。 我不能使用 JavaScript,因为我也在使用本地时间进行一些计算。

【问题讨论】:

  • Java 脚本与否,您不能信任来自客户端的数据。

标签: php localtime


【解决方案1】:

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

或者,只需询问用户他们喜欢哪个时区并将其记住在 cookie 或会话变量中。

【讨论】:

  • 不确定为什么可靠性应该成为您提到的用例的问题。您可以通过 99% 的时间猜测他们的时区来取悦用户,其余时间让他们调整。
【解决方案2】:

虽然我从未使用过它,但似乎有一些功能可以让您设置时区,还有其他日期功能可以告诉您当前时区设置与 GMT 之间的差异。这些可能会对您有所帮助。

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

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

【讨论】:

    【解决方案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 日之后导致问题。

    【讨论】:

    • @SuperSpy:Np。只需确保在 cookie 上设置不同的过期日期 - 当前客户端的时间 + 几天总是最好的,或者将其保留,以便 cookie 在客户端浏览会话结束时过期。
    【解决方案4】:

    有两个很好的解决方案:

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

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

    【讨论】:

    • 好吧,我正在制作一个脚本,用户需要知道昨天发生了什么。因此,就我而言,您的第一个选择是最好的选择。谢谢,我会接受你的答案作为答案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多