我正在使用CodeIgniter 2.1.x和MySQL
我在使用mysql列类型DATETIME
和TIMESTAMP
之间发现了很多建议,但是我不确定哪些用于我想要构建的内容是否正确。
我有一个应用程序,用户可以通过<form></form>
向谷歌地图添加标记。
提交每个标记后,应使用此函数记录mysql列date_created
和date_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());
}
...
}
}
但是当我将列类型设置为TIMESTAMP
或DATETIME
时,它永远无法正确更新。
有什么建议我在这里做错了吗?
答案 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'));