【问题标题】:Php timezones and list visitedPHP时区和访问列表
【发布时间】:2013-12-25 22:20:56
【问题描述】:

首先,我想为我的网站设置默认时区为 GMT,我找到了这个

htaccess:

php_value date.timezone "America/Chicago"

SetEnv TZ GMT

SetEnv TZ Europe/Amsterdam

(我知道美国/芝加哥不是格林威治标准时间;))正确的选项应该是什么样子?

其次,我想在用户注册时保存用户时区,并允许他在个人资料设置中更改时区

最后,如何使用用户选择的时区?我将网站上的所有时间都保存为 unix 时间戳 (time())

【问题讨论】:

    标签: php .htaccess datetime timezone gmt


    【解决方案1】:

    如果您可以访问它,您应该在 php.ini 中将 date.timezone 设置为 UTC,如果没有,则在 .htaccess 中这样做:-

    php_value date.timezone UTC
    

    除非您另外指定,否则您的应用程序现在将默认使用 UTC 作为时区。 您可以使用this list 中的字符串存储用户时区。只需让您的用户从下拉列表中选择正确的选项即可。

    您的应用程序应使用 unix 或 mysql 时间戳将所有日期/时间存储为 UTC。我个人偏爱unix时间戳。

    向用户展示日期时,请使用DateTime 类。例如:-

    $timeZoneString = getTimeZoneFromDB();
    $tz = new \DateTimeZone($timeZoneString);
    $date = (new \DateTime())->setTimeZone($tz);
    echo $date->format('Y-m-d H:i:s);
    

    您应该使用date_default_timezone_set() 即时修改时区,因为这会对您的应用产生不可预知的副作用。如果该特定功能完全被使用,它应该只在您的应用程序中使用一次。如果它看起来不止于此,您应该将其视为代码异味。

    【讨论】:

    • 什么不可预知的副作用?
    • 如果你有多个日期变量或 DateTime 实例,那么使用 date_default_timezone_set() 会影响它们,可能不是你想要的。我是根据经验说的:(
    • 我不明白您为什么要彼此显示混合(已经令人困惑)的时区,但这可能只是我。无论如何,我认为这比我的方法更好,所以我删除了我的答案。
    猜你喜欢
    • 1970-01-01
    • 2012-04-11
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多