Php 1970-01-01将在未选择日期时插入数据库

Php 1970-01-01将在未选择日期时插入数据库,php,mysql,date,Php,Mysql,Date,我有一个用php输入日期的文本框。因为我希望日期是我正在使用的特定格式。 date(“d.m.Y”,strotime())转换日期。如果没有给出日期,或者我将文本框留空,则会将1970-01-01输入数据库。我怎样才能解决这个问题? 这是我的密码 $d_date= clean($_POST['datum']); $newdate = date("Y-m-d", strtotime( $d_date)); 如果$d_date值为空,则会将1970-01-01输入数据库 将数据库中的字段设置为空

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

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

如果
$d_date
值为空,则会将1970-01-01输入数据库

将数据库中的字段设置为空,当表单中未提交日期时,将其设置为空。mysql的默认行为是将日期设置为默认值,即1970-01-01(unix时代)

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

因此,
strotime(null)
返回
bool(false)

date()
函数的第二个参数是一个整数,因此当调用
date(“Y-m-d”,false)
时,
false
转换为
0
,而
date(“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。

您可以使用此选项检查strotime return false或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) : '');

1970-01-01 00:00:00是Unix时间戳的开始时间:因此,如果输入
0
作为时间戳,实际上是1970-01-01 00:00:00,这主要是因为
strotime()
无法从给定字符串创建时间。
$d_date
变量中包含什么?Dupes$d_date值为空。@MarcusAdams:你的意思是说
strotime(null)
还是
date('Y-m-d',null)
返回
1970…
?@Ravinder,
date('Y-m-d',strotime(null))
返回。