2

c我在表单上使用 jQuery 日历日期选择器。未填写日期时,始终显示“1969-12-31”值。我不想显示这个值,0000-00-00 对我来说很好。

我的 MySQL 日期列是receive_dt DATE NOT NULL,

这是 PHP 文件中用于处理表单的片段代码。

...

$rcv_dt = $_POST['receive_dt'];
    list($year,$month,$day)=explode('/',$rcv_dt);
    $timestamp=mktime(0,0,0,$year,$month,$day);
    $receive_dt=date('Y-m-d',$timestamp);

..., receive_dt) VALUES (....,'$receive_dt')...

我试过做 strtotime() 但没有运气。

$receive_dt=date('Y-m-d', strtotime($rcv_dt));

我什至改变了 MySQL reveive_dt column to DATE NULL,但仍然没有运气。

4

4 回答 4

2

学习使用DateTime对象。使用strtotimemktime和其他基于整数的时间格式是一种过时且糟糕的方法。

$dt = date_create($_POST['receive_dt']);
if ($dt !== null)
{
  echo $dt->format('Y-m-d H:i:s'); // insert this value
}
于 2013-07-03T19:03:36.390 回答
2

首先,你得到的是 1969 年底而不是 1970 年初(“Unix 纪元”从 1970 年 1 月 1 日午夜开始)这一事实表明你有一些时区处理错误导致你“失去”一个小时,所以只是一个提示。

现在,您看到这一点的原因是 PHP 的日期格式化函数将您提供的任何输入视为数字;如果你给他们一个空字符串,或者null,这将被转换为数字,并解释为 Unix 纪元的开始 - 1970 年 1 月 1 日。如果你尝试传递一个空字符串或填充时0MySQL 可能会做类似的事情0列。

您需要做的是专门检测这种情况 - 如果您的应用程序实际上不应该将 1970 年 1 月 1 日作为输入,这很容易 - 并且专门将 aNULL插入数据库而不是格式化日期。

于 2013-06-14T19:37:29.353 回答
2
$invalid_dates='1969-12-31'; // anything before

$rcv_dt = $_POST['receive_dt'];

if(strtotime($invalid_dates) >= strtotime($rcv_dt))
{
$rcv_dt='0000-00-00'; // or $rcv_dt=date('Y-m-d'); // today
}

http://php.net/manual/en/function.checkdate.php

于 2013-06-14T19:45:03.510 回答
0

如果您将 $receive_dt 作为空字符串发送..., receive_dt) VALUES (....,'')...(在检查 post 变量为空之后),则 mysql 会将 is 视为 null,否则 php 发送的日期为 0,对于 mysql 来说,它是 unix 纪元的开始日期。

于 2013-06-14T19:35:48.170 回答