日期在DB中显示为“1969-12-31”

时间:2014-10-15 01:03:35

标签: php jquery mysql ajax codeigniter

我正在尝试使用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

任何?

2 个答案:

答案 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));