如何解决PHP date()NULL值1969?

时间:2013-06-14 19:30:50

标签: php mysql date

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,但仍然没有运气。

4 个答案:

答案 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
}

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

答案 2 :(得分:1)

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

$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时代。