cI在我的表单上使用jQuery日历日期选择器。未填写日期时,它始终显示“1969-12-31”值。我不想显示这个值,我也不错。
我的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
,但仍然没有运气。
答案 0 :(得分:2)
首先,你要到1969年结束而不是1970年初(“Unix纪元”从1970年1月1日午夜开始)的事实表明你有一些时区处理错误导致你“失去”一个小时,所以只是一个单挑。
现在,您完全看到这一点的原因是,PHP的日期格式化功能会将您提供的任何输入视为数字;如果你给它们一个空字符串,或者null
,它将被转换为数字0
,并被解释为Unix时代的开始 - 1970年1月1日。如果你,MySQL可能会做类似的事情在填充列时尝试将空字符串或0
传递给它。
你需要做的是专门检测这种情况 - 如果你的应用程序永远不会真正将1970年1月1日作为输入 - 并且特别是将NULL
插入数据库而不是格式化日期,那么这很容易。
答案 1 :(得分: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
}
答案 2 :(得分:1)
学习使用DateTime
对象。使用strtotime
,mktime
和其他基于整数的时间格式是一种过时且不好的方法。
$dt = date_create($_POST['receive_dt']);
if ($dt !== null)
{
echo $dt->format('Y-m-d H:i:s'); // insert this value
}
答案 3 :(得分:0)
如果你发送$ receive_dt作为一个空字符串..., receive_dt) VALUES (....,'')...
(在检查post变量为空之后),那么mysql会将其视为null,否则php发送的日期为0,其中mysql是开始日期unix时代。