我在英国,但我的网站在美国的服务器上运行。进入数据库的一些日期反映了服务器时间,一些反映了英国时间。我很困惑这是怎么发生的。
我已经在 codeigniter index.php 文件中设置了时区,date_default_timezone_set('Europe/Dublin');
它似乎适用于某些控制器而不适用于其他控制器。
关于在哪里寻找问题的任何建议。我应该在每个控制器的构造函数中使用时区函数吗?
我在英国,但我的网站在美国的服务器上运行。进入数据库的一些日期反映了服务器时间,一些反映了英国时间。我很困惑这是怎么发生的。
我已经在 codeigniter index.php 文件中设置了时区,date_default_timezone_set('Europe/Dublin');
它似乎适用于某些控制器而不适用于其他控制器。
关于在哪里寻找问题的任何建议。我应该在每个控制器的构造函数中使用时区函数吗?
我认为这是因为 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}'");
您的控制器可能会扩展同一个控制器 CI_Controller
您可以尝试在构造函数中添加代码,CI_Controlle 是文件
System/core/Controller.php
您可能正在使用两种不同的方法来确定时间。也许在某些情况下,它是由客户端确定的,您以不同的方式使用 strtotime 和 date ...
普遍接受的处理方法是输入 Unix 时间戳和/或使用确定正确时间的单一方法。然后,不要在系统文件夹中弄乱控制器(每次升级时都必须这样做),而是在应用程序的核心文件夹中使用 MY_Controller 扩展控制器,并在那里定义/确定时区 - 任何一个都可能这样做。
这取决于您如何将日期插入数据库。
您可以通过使用 strtotime 或 time 将时间戳作为整数插入到数据库中来解决此问题。在视图中显示日期时,使用 date 或 strftime 将它们转换回来
在主 index.php 中设置时区应该足够了。