8

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

6 回答 6

18

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

配置/自动加载.php

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

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

应用程序/模型/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。

于 2013-12-10T07:16:49.717 回答
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
于 2013-07-02T13:30:11.247 回答
1

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

$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);

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

于 2019-10-03T11:32:48.133 回答
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');
于 2021-01-21T06:58:47.427 回答
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);

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

于 2018-06-21T00:38:19.550 回答
-5

您可以在项目文件夹顶部和之后的 index.php 文件中设置它<?php

<?php
date_default_timezone_set('Asia/Bangkok');
于 2013-12-10T09:19:36.047 回答