Codeigniter时区mysql设置

时间:2013-07-02 13:27:05

标签: mysql codeigniter timezone

刚刚意识到为什么我的网站现在将所有日期时间变量显示为-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-&gt; 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();
}

6 个答案:

答案 0 :(得分:12)

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

<强>配置/ autoload.php

  

$ autoload ['model'] = array('default_model'); //对于ex,“说   default_model“

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

<强>应用/模型/ default_model.php

  

类Default_model扩展了CI_Model {

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

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

答案 1 :(得分: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

答案 2 :(得分:1)

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

CustomPainter

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

答案 3 :(得分:1)

为 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');

答案 4 :(得分:0)

我喜欢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);

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

答案 5 :(得分:-4)

您可以在项目文件夹中的index.php文件中设置它,然后在<?php

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