如何处理MySQL和PHP中的日期和时间?

时间:2013-08-26 19:14:46

标签: php mysql codeigniter-2

我正在使用CodeIgniter 2.1.x和MySQL 我在使用mysql列类型DATETIMETIMESTAMP之间发现了很多建议,但是我不确定哪些用于我想要构建的内容是否正确。

我有一个应用程序,用户可以通过<form></form>向谷歌地图添加标记。 提交每个标记后,应使用此函数记录mysql列date_createddate_end的当前时间,该列应为+ 1天:

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());
        }
        ...
    }

}

但是当我将列类型设置为TIMESTAMPDATETIME时,它永远无法正确更新。

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

3 个答案:

答案 0 :(得分:0)

如果CodeIgniter上存在now()函数(它不在vanilla PHP上),请检查它的输出是否符合以下格式:Y-m-d H:i:s,否则,这个问题可以帮助您:{{ 3}},您也可以使用Inserting NOW() into Database with CodeIgniter's Active Record代替now()

答案 1 :(得分:0)

插入前明天

var dump $。检查其格式,如果没有正确的加载日期帮助器并使用mdate() http://ellislab.com/codeigniter/user-guide/helpers/date_helper.html

答案 2 :(得分:0)

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

如果这不是问题,那么这将有效。

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

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

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

例如

$dt = new DateTime('stored datetime', new DateTimeZone('UTC'));
$dt->setTimeZone(new DateTimeZone('users timezone'));