【问题标题】:Date Showing up as "1969-12-31" in DB日期在 DB 中显示为“1969-12-31”
【发布时间】:2014-10-15 01:03:35
【问题描述】:

我正在尝试使用serialize() 将日期值存储在 MySQL 数据库中。但是,数据库中的结果被视为“1969-12-31”。我几乎可以肯定这是因为数据在我的 ajax 调用中被序列化的方式。

这里是代码 sn-ps。我哪里错了?

Ajax 部分:

data: decodeURIComponent(form.serialize()),

序列化数据的Result部分是这样的(当我在控制台查看序列化数据时):

&pur-date=2014+/+02+/+31

^ 我认为“+”是导致错误的原因。

在我的模型中(Codeigniter):

$date = date("Y-m-d", strtotime($this->input->post('pur-date')));

例如,如果我将strtotime 值替换为“2014-10-10”,则数据会正确存储到数据库中。所以这个问题必须与进来的帖子数据有关。

注意,db 中的列类型是date

有人吗?

【问题讨论】:

  • 看起来你的约会中有空格。删除它们。
  • strtotime 可以处理数量惊人的格式。如果您向它传递一个它无法识别的字符串,那么该格式将不是其中之一。只要去掉空格,你就可以了
  • 猜猜我遇到的问题(当我尝试完全按照您的建议进行操作时)是我使用了replace() - 这不起作用。如何删除序列化数据中的空格?
  • echo $this->input->post('pur_date'); 显示什么?
  • 我的post 实际上有一个拼写错误。应该是 pur-date 而不是 pur_date。但是,我仍然没有得到正确的日期。回声是这样的:2014+/+02+/+31

标签: php jquery mysql ajax codeigniter


【解决方案1】:

我不完全确定发生了什么,因为没有提供测试数据(来自表格),但这里有一些我会立即检查的内容:

  • Javascript 以毫秒为单位,Java 以秒为单位,PHP 以秒为单位:这是您最可能遇到的问题。

  • 我不知道 2014-02-31 是从哪里来的。今年没有 2 月 31 日,或者,就此而言,从来没有。这可能会破坏事情吗?

【讨论】:

    【解决方案2】:

    所以,想通了 - 感谢我最初的问题中的 cmets。我能够从模型中的字符串中删除空格。发布数据是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));
    

    【讨论】:

    • 请记住,正如@logicalicy 在他的回答中提到的那样,2 月 31 日并不存在。 PHP 将其视为 3 月 3 日。 strtotime('2014/02/31') === strtotime('2014/03/03');
    • 我知道。只是一个例子 - 无论如何日期都会写入数据库。我有一个日期选择器插件可以处理这个问题。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多