php - 应用多个时区的最佳方式是什么?

标签 php codeigniter timezone

我正在努力在 Codeigniter(2.0) 中应用基于 session 的时区。

场景:

用户登录系统后,我使用纬度/经度来检测时区 ID 并将其设置为 session 变量,然后在每个 Controller 的构造函数中调用 set_timezone() 。

例如自动加载的帮助程序文件:

function set_timezone($timeZoneId='')
{
  if($timeZoneId!="")
  {
    date_default_timezone_set($timeZoneId);
    mysql_query("SET SESSION time_zone = '".$timeZoneId."'");
  }
}

我的问题是我不想在每个 Controller 的构造函数中调用set_timezone()。我想要的是全局调用而不是每个 Controller 的构造函数。

最佳答案

您应该创建一个名为 MY_Controller 的父 Controller 所有其他 Controller 都可以扩展。在该类的构造函数中,您可以调用set_timezone。通过此解决方案,将在所有子 Controller 中自动设置时区。

您的MY_Controller应存储在application/core中,并且应如下所示:

class MY_Controller extends CI_Controller
{
  function __construct()
  {
    parent::__construct();
    $this->set_timezone();
  }

  function set_timezone($timeZoneId='')
  {
    // Your code
  }
}

现在您的所有其他 Controller 都应该扩展 MY_Controller 而不是 CI_Controller。例如:

class WelcomeController extends MY_Controller
{
  function __construct()
  {
    // This will call the constructor of MY_Controller,
    // which in turn sets the timezone:
    parent::__construct();
  }

  // Rest of your functions...
}

关于php - 应用多个时区的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15563845/

相关文章:

java - java/android中的不同日期

Java SimpleDateFormat ("yyyy-MM-dd' T'HH :mm:ss'Z'") gives timezone as IST

php - Exchange Web 服务请求在某些使用 PHP-EWS 的服务器上返回 401

php - 在 Codeigniter 中加载主页时如何跳过数据库文件或模型文件?

php - 如何在 Windows 上为 PHP 安装 PDO 驱动程序?

php - SELECT 中带有 OR 的 Mysql PDO 语句

javascript - Ajax 功能在 CodeIgniter 中不起作用

r - 使用 format.Posix* 在 R 中使用时区格式化 Sys.time() 的输出

php - AJAX 请求返回 JSON,不工作

php - 无法在访问器方法中获取属性 - laravel Eloquent