当没有选择日期时,1970-01-01将被插入数据库

时间:2014-01-23 12:52:34

标签: php mysql date

我有一个文本框,在php中输入日期。因为我希望日期是我正在使用的特定格式。 date("d.m.Y", strtotime())转换日期。如果没有给出日期或者我将文本框留空,则会将1970-01-01输入数据库。我怎么解决这个问题? 这是我的代码

 $d_date= clean($_POST['datum']);
$newdate = date("Y-m-d", strtotime( $d_date));

如果$d_date值为null,则它将输入1970-01-01到数据库。

3 个答案:

答案 0 :(得分:7)

使数据库中的字段可以为空,并且在表单中未提交日期时将其设置为NULL。 mysql的默认行为是将日期设置为默认值,即1970-01-01(unix epoch)

答案 1 :(得分:1)

PHP strtotime()失败时返回false。这包括参数为null,空白。或任何其他无效格式的字符串。

因此,strtotime(null)会返回bool(false)

date()函数的第二个参数是整数,因此当您致电date("Y-m-d", false)时,false会转换为0date("Y-m-d", 0)会返回纪元日期。

在将值插入数据库之前,这是一种处理此问题的简单方法:

// Default to null
$newdate=null;
// Only proceed if strtotime() succeeds
if($d_date=strtotime($_POST['datum'])) {
  // Since we have a valid time, turn to date string
  $newdate=date("Y-m-d", $d_date);
}

然后,只需在日期列上允许NULL,以便可以插入null。

答案 2 :(得分:0)

<强> you can use this to check strtotime return false or true

$from_date=strtotime($_POST["from"]); 
$from_date=($from_date ? date("Y-m-d", $from_date) : '');

$to_date=strtotime($_POST["to"]);
$to_date=($to_date ? date("Y-m-d", $to_date) : '');