我正在尝试使用serialize()
将日期值存储在MySQL数据库中。但是,db中的结果被视为“1969-12-31”。我几乎可以肯定这是因为我的ajax调用中数据的序列化方式。
以下是代码段。我哪里错了?
Ajax部分:
data: decodeURIComponent(form.serialize()),
序列化数据的结果部分是这样的(当我在控制台中查看序列化数据时):
&pur-date=2014+/+02+/+31
^我认为“+”是造成错误的原因。
在我的模型中(Codeigniter):
$date = date("Y-m-d", strtotime($this->input->post('pur-date')));
例如,如果我将strtotime
值替换为“2014-10-10”,则数据会正确存储到数据库中。所以这个问题必须与后来的帖子数据有关。
请注意,db中的列类型为date
。
任何?
答案 0 :(得分:0)
我不完全确定发生了什么,因为没有提供测试数据(来自表格)但是我会立即检查以下内容:
Javascript以毫秒为单位,Java以秒为单位,PHP以秒为单位计算:这是您最可能遇到的问题。
我不知道2014-02-31来自哪里。今年2月31日没有,或者就此而言。这可能会破坏事情吗?
答案 1 :(得分:0)
所以,想通了 - 感谢对我最初问题的评论。我能够从模型中删除字符串中的空白区域。发布数据为2014 / 02 / 31
,而不是浏览器控制台中显示的2014+/+02+/+31
。
新代码:
$format = preg_replace('/\s+/', '', $this->input->post('pur-date')); // formats string and removes whitespace
$date = date("Y-m-d", strtotime($format));