codeigniter和时区

时间:2012-10-23 09:00:42

标签: php codeigniter

我的总部设在英国,但我的网站在美国的服务器上运行。进入数据库的一些日期反映了服务器时间,有些日期反映了英国时间。我很困惑这是怎么发生的。

我已经使用date_default_timezone_set('Europe/Dublin');在codeigniter index.php文件中设置了时区。它似乎适用于某些控制器而不适用于其他控制器。

有关在何处查找问题的任何建议。我应该在每个控制器的构造函数中使用timezone函数吗?

4 个答案:

答案 0 :(得分:0)

您的控制器可以扩展相同的一个控制器CI_Controller
您可以尝试在构造函数中添加代码,CI_Controlle是文件

System/core/Controller.php 

答案 1 :(得分:0)

您可能正在使用两种不同的方式来确定时间。也许在某些情况下,它是确定客户端,你以不同的方式使用strtotime和日期......

普遍接受的处理方法是输入Unix时间戳和/或使用一种方法来确定正确的时间。然后,不要在系统文件夹中弄乱控制器(每次升级时都必须这样做),在aplication的核心文件夹中使用MY_Controller扩展控制器,然后在那里定义/确定时区 - 任何一个都可能。 / p>

答案 2 :(得分:0)

我认为这是因为MySQL使用服务器时区,可能没有配置到您的时区。最佳解决方案是配置服务器以适合您的时区。

然而,我曾经遇到过同样的情况,没有改变服务器的空间(它有其他美国网站)。所以,我被迫在每个请求上设置MySQL的时区。我知道这不太理想,但它确实有效。

我有一个在我的应用程序中自动加载的库,然后我在该类的构造函数上调用了DB。我在配置文件中设置了时区。

$CI = &get_instance();

// Let's set timezone in the DB
$timezone = new DateTimeZone($CI->config->item('app_timezone'));
$offset = $timezone->getOffset(new DateTime("now")); // Offset in seconds
$gmt_offset = ($offset < 0 ? '-' : '+') . str_pad(floor($offset/3600), 2, '0') . ':' . str_pad(($offset % 3600)/60, 2, '0');

$CI->db->query("SET time_zone = '{$gmt_offset}'");

答案 3 :(得分:-1)

这取决于您如何将日期插入数据库。

您可以通过使用strtotime或time将时间戳作为整数插入数据库来解决此问题。 在视图中显示日期时,请使用date或strftime将其转换回来

设置主index.php中的时区应该足够了。