【问题标题】:Setting PHP's default timezone设置 PHP 的默认时区
【发布时间】:2012-03-29 06:36:57
【问题描述】:

在我的网络应用中,我让用户从一个列表(包含all timezones that PHP supports)中选择他们喜欢的时区。

假设$_POST['timezone'] 是选择的时区(例如 America/New_York)。 我使用以下代码设置它,不会产生错误:

default_date_timezone_set($_POST['timezone']);

但是当我重新加载页面时,它会恢复到之前的状态(例如 Europe/Moscow)。 我是否必须在每个脚本中设置默认时区,或者函数 (default_date_timezone_set) 是否正常工作? 谢谢!

【问题讨论】:

  • PHP 是无状态的,这意味着对于每个请求,您都会丢失任何设置或变量。
  • 那个函数不是在服务器级别设置的吗?你不希望它在会话或客户端级别,因为它是基于用户的吗?
  • 我想你会的。与更改核心设置的任何函数一样,这些更改具有脚本运行时范围。否则,“多用户”的概念是不可能的……
  • @JimmyBanks,不,我非常了解会话和 cookie。 SQL 表与什么有什么关系?我只是忘了default_date_timezone_set不影响服务器但用户的会话
  • 你在开玩笑吗?你不认为我知道如何将值保存到会话中吗?我已经说过我忘记了该功能会影响用户会话而不是服务器。 (它只影响客户查看日期的方式,而不影响日期在数据库中的存储方式)

标签: php time timezone


【解决方案1】:

您应该将其保存在数据库中,并在您做任何与时间相关的事情时设置时区。它工作正常。它只应该为该脚本执行(一个 HTTP 请求)设置它。

【讨论】:

    【解决方案2】:

    此函数仅更改执行脚本的时区。 您可以将时区存储在会话变量中,并在每个页面的顶部设置时区。

    【讨论】:

      【解决方案3】:

      设置一个包含用户选择的时区的 cookie。

      /// Make sure you sanitize all POST/COOKIE variables if needed.
      $timezone = $_COOKIE['timezone'];
      
      if(isset($_POST['timezone'])) {
          /// Set cookie for some amount of time -- I chose 2 weeks
          setcookie('timezone',$_POST['timezone'],time()+60*60*24*14);
          $timezone = $_POST['timezone'];
      }
      
      default_date_timezone_set($timezone);
      

      【讨论】:

        猜你喜欢
        • 2011-09-03
        • 2012-12-21
        • 2015-07-01
        • 1970-01-01
        • 2011-11-21
        • 2011-07-01
        • 1970-01-01
        相关资源
        最近更新 更多