【问题标题】:Codeigniter timezone mysql settingsCodeigniter时区mysql设置
【发布时间】:2013-06-29 21:32:12
【问题描述】:

刚刚意识到为什么我的网站现在将所有日期时间变量显示为 -1 小时...我第一次使用 Codeigniter! (以前没遇到过这个问题)

所以,我在我的主 index.php 文件中包含了以下代码

/*
|---------------------------------------------------------------
| DEFAULT TIMEZONE
|---------------------------------------------------------------
|
| Set the default timezone for date/time functions to use if
| none is set on the server.
|
*/

if( ! ini_get('date.timezone') )
{
   date_default_timezone_set('GMT');
}

但是,它仍然显示为 -1 小时,所以我假设我需要为 MySQL 设置某种默认设置...

我的模型中包含以下代码行:

   function __construct()
    {
        // Call the Model constructor
        parent::__construct();
        $this->db->query("SET time_zone='+0:00'");
    }

仍然没有区别...帮助!

我的代码是:

<h3><?=date('D, jS F @ g:ia', strtotime($row->datetime))?></h3>

$row->datetime 变量只不过是我的 MySQL 数据库中的 DATETIME 列值。视图中的回显变量总是比我数据库中的值少 1 小时...

我的型号代码是:

function coming_up()
{
    $this->db->query("SET time_zone='+0:00'");
$query = $this->db->query('SELECT * FROM events1 WHERE datetime >= NOW() ORDER BY datetime LIMIT 2');
return $query->result();
}

【问题讨论】:

    标签: mysql codeigniter timezone


    【解决方案1】:

    在 config/autoload.php 中,设置在每个页面加载时加载的模型。然后调用 $this->db->query("SET time_zone='+0:00'");在那个模型构造函数中。

    config/autoload.php

    $autoload['model'] = array('default_model');// for ex, "say default_model"
    

    在应用程序/模型中,创建一个名为“default_model.php”的新模型文件并添加以下代码。

    application/models/default_model.php

    class Default_model extends CI_Model {
    
         function __construct()
         {
             // Call the Model constructor
             parent::__construct();
             $this->db->query("SET time_zone='+0:00'");
         }
     }
    

    在每次页面加载时,将调用此构造函数,并将 mysql 时区设置为 +0:00。

    【讨论】:

    • 如果你需要处理夏令时,你可以加载命名区域$this-&gt;db-&gt;query("SET time_zone='America/Chicago'");注意你需要设置mysql时区mysql_tzinfo_to_sql
    • defined('BASEPATH') OR exit('No direct script access allowed.'); 行下方的application/config/config.php 中添加类似date_default_timezone_set('TIMEZONE_SET_FOR_DATABASE'); 的内容也是一个好主意
    • date_default_timezone_set 达到 php 级别。如果您的 db 和 php 文件位于同一服务器并且 mysql 使用相同的时区,那么您可以使用它但不确定 mysql 的行为。如果数据库在另一台服务器上,那么你必须按照我的解决方案。
    【解决方案2】:

    在您的config file 中添加这些行,然后检查,它对我有用

    $config['time_reference'] = 'gmt';# Default should be GMT
    date_default_timezone_set('UTC');# Add this line after creating timezone to GMT for reflecting
    

    【讨论】:

    • 恐怕没有变化...@Rohan Kumar
    • 检查您的insert query,它应该看起来像$this-&gt;db-&gt;query("INSERT INTO TABLE SET time_zone='+0:00'");
    • 见上文,我已经编辑了我的帖子以包含我的查询代码@Rohan Kumar 不过,没有区别!
    【解决方案3】:

    我也面临这个问题。 我试过这种方式..

    $this->db->query("SET LOCAL time_zone='Asia/Kolkata'");
    $query="SELECT * FROM offers where NOW() between offfer_from and offer_to";
    $res=$this->db->query($query);
    

    它将在我的项目中正常工作,我没有使用任何新的默认模型。如果您想要全局解决方案,则意味着您可以使用自动加载某些模型。

    【讨论】:

      【解决方案4】:

      为 MySQL 设置默认时区: 转到:Your_Project/system/core/Model.php 然后更新这个函数:

      public function __construct() {
          $this->db->query("SET time_zone='YOUR_TIME_ZONE'");     
      }
      

      为 PHP 设置 default_time_zone : 转到 Your_Project/index.php 然后在这里更新:

      define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');
      date_default_timezone_set('YOUR_TIME_ZONE');
      

      【讨论】:

        【解决方案5】:

        我喜欢 Kumar 提出的解决方案,但我不需要在全局范围内设置它,只有在我的数据库中显示以 UTC 时间存储的日期时。

        在我的 api 模型中,我有以下功能。

          public function setDBTimeOffset(){
            $dt = new DateTime();
            $offset = $dt->format("P");
            $result = $this->db->query("SET time_zone='$offset';");
            return $result;
          } # END FUNCTION setDBTimeOffset
        

        从我的控制器中,我首先调用以下命令。

          $this->api->setDBTimeOffset();
        

        随后调用查询数据库的函数。例如,我正在获取一些用户历史记录。

          $data["viewData"]["allHistory"] = $this->api->getUserHistory("ALL", 0, 10000);
        

        当我显示输出时,日期在我的时区。我希望这对某个时间的某个人有所帮助(无法抗拒)。

        【讨论】:

          【解决方案6】:

          你可以在你的项目文件夹的 index.php 文件中设置它的顶部和&lt;?php之后

          <?php
          date_default_timezone_set('Asia/Bangkok');
          

          【讨论】:

            猜你喜欢
            • 2012-09-21
            • 1970-01-01
            • 2015-09-27
            • 1970-01-01
            • 2017-12-09
            • 2013-09-22
            • 1970-01-01
            • 2016-10-05
            • 1970-01-01
            相关资源
            最近更新 更多