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

如何在MySQL和PHP中处理日期和时间?,php,mysql,codeigniter-2,Php,Mysql,Codeigniter 2,我正在使用CodeIgniter 2.1.x和MySQL。 我在使用mysql列类型DATETIME和TIMESTAMP之间找到了很多建议,但我不确定哪一个是真正正确的,可以用于我想要构建的内容 我有一个应用程序,用户可以通过向谷歌地图添加标记。 每次提交标记后,应记录mysql列date\u created和date\u end的当前时间,通过使用此函数,该列应为+1day: class Maps extends CI_Controller{ ... public functi

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

我有一个应用程序,用户可以通过
向谷歌地图添加标记。 每次提交标记后,应记录mysql列
date\u created
date\u 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
DATETIME
的列类型时,它永远不会正确更新


如果CodeIgniter上存在
now()
函数(在普通PHP上不存在),那么检查它的输出是否与以下格式匹配:
Y-m-dh:I:s
,否则,这个问题可以帮助您:,另外,如果
now(),您可以使用而不是
now()
函数存在于CodeIgniter上(它不存在于普通PHP上),然后检查它的输出是否匹配以下格式:
Y-m-d H:i:s
,否则,这个问题可以帮助您:,另外,您可以在插入之前使用而不是
now()
var dump$。检查其格式,如果不正确,请加载日期帮助程序并使用mdate()

var在插入前明天转储$。检查其格式,如果不正确,请加载日期帮助程序并使用mdate()
这也取决于你是否关心时区。如果一个用户说在澳大利亚做了一些事情,而另一个用户在美国需要看到这些事情,那么您需要将日期时间存储在用户各自时区的上下文中

如果这不是你的问题,这将工作

$dt = new DateTime ('+1 day' , new DateTimeZone('Australia/Hobart')); 
$tomorrow = $dt->format('Y-m-d H:i:s');
只需使用离服务器最近的大陆/城市作为时区

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

例如


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

如果这不是你的问题,这将工作

$dt = new DateTime ('+1 day' , new DateTimeZone('Australia/Hobart')); 
$tomorrow = $dt->format('Y-m-d H:i:s');
只需使用离服务器最近的大陆/城市作为时区

如果用户位于不同的时区。最好将$datetime保存在“UTC”时区(即新的DateTimeZone(“UTC”)中),然后可以在请求数据的用户的用户时区中呈现datetime

例如


是的,它是ci提供的某种日期助手,在执行
now()
,这是输出的
1377551478
,我想以这种格式存储数据(时间戳),但是,它就是不让它发生,我总是在
标记中这样做。date\u end
->
0000-00-00 00:00:00
即使列的类型设置为
TIMESTAMP
。?感谢链接,当前检查它,顺便说一句,您提供的链接,我已经尝试过了,它现在正在工作,我认为问题在MYSQL处理中的某个地方,是吗因为它只是不会更新数据,而在另一个POSSI中建议将这个添加到您的答案中,请考虑更新您的帖子,这样我就可以接受它。我用MySQL来代替它,而不是PHP WORD()是,它是由CI提供的某种日期帮助器,同时做<代码>现在()。,这是输出的
1377551478
,我想以这种格式(时间戳)存储数据,但是,它就是不让它发生,我总是在
标记中这样做。date\u end
->
0000-00-00 00:00:00
即使列的类型设置为
TIMESTAMP
。?感谢链接,当前检查它,顺便说一句,您提供的链接,我已经尝试过了,它现在正在工作,我认为问题在MYSQL处理中的某个地方,是吗因为它不会更新数据,而在另一个POSSI中建议把这个添加到你的答案中,请考虑更新你的帖子,这样我就可以接受它。我用MySQL做了它,而不是PHP WORD()以前的帖子可能会有帮助:以前的帖子可能会有帮助: