1

我正在使用 CodeIgniter 2.1.x 和 MySQL。我在使用 mysql 列类型和
之间找到了很多建议,但我不确定哪个对我想要构建的内容真正正确。DATETIMETIMESTAMP

我有一个应用程序,用户可以在其中通过<form></form>. 每次提交标记后,应为 mysql 的列记录当前时间date_createddate_end使用此函数应为 +1day:

class Maps extends CI_Controller{
    ...
    public function marker($action = NULL, $slug = 'marker_add'){
        ...
        if($this->form_validation->run() == TRUE){
            $tomorrow = now() + 86400;
            $data_markers = array(
                'tid'           => $this->input->post('formMarkType'),
                'lat'           => $this->input->post('formMarkLat'),
                'lng'           => $this->input->post('formMarkLng'),
                'state'         => 1,
                'description'   => $this->input->post('formMarkDescription'),
                'date_end'      => $tomorrow
            );
            $this->map_model->markers_add($data_markers);
            redirect(site_url());
        }
        ...
    }

}

TIMESTAMP但是当我使用设置为or的列类型时,它永远不会正确更新DATETIME

有什么建议我在这里做错了吗?

4

3 回答 3

1

如果该now()函数存在于 CodeIgniter 上(它不存在于普通 PHP 上),那么检查它的输出是否与以下格式匹配:Y-m-d H:i:s否则,这个问题可以帮助你:Inserting NOW() into Database with CodeIgniter's Active Record,你也可以使用PHP 标准日期和时间函数代替now()

于 2013-08-26T19:28:13.170 回答
0

var dump $tomorrow 在插入之前。检查其格式,如果不是正确的加载日期助手并使用 mdate() http://ellislab.com/codeigniter/user-guide/helpers/date_helper.html

于 2013-08-29T13:36:29.220 回答
0

它也可能取决于您是否关心时区。如果一个用户说在澳大利亚做了某事,而在美国的其他用户需要看到那件事,那么您需要将日期时间存储在用户各个时区的上下文中。

如果这对您来说不是问题,这将起作用。

$dt = new DateTime ('+1 day' , new DateTimeZone('Australia/Hobart')); 
$tomorrow = $dt->format('Y-m-d H:i:s');

只需使用离您的服务器最近的大陆/城市作为时区。

如果您有不同时区的用户。最好将 $datetime 保存在 'UTC' 时区(即 new DateTimeZone('UTC') 然后您可以在请求数据的用户的用户时区中呈现日期时间。

例如,

$dt = new DateTime('stored datetime', new DateTimeZone('UTC'));
$dt->setTimeZone(new DateTimeZone('users timezone'));
于 2013-09-19T11:48:22.573 回答