Php 空日期作为1970/01/01进入数据库
因此,我有一个数据库列来表示日期,但是当用户将此部分留空并更新它保存在数据库中的记录(1970/01/01)时 现在,当我设置columngnull=no和default=none时,这是行不通的 在我的代码中,我检查该值是否为null(这就是strotime()函数失败的原因)。如果为空,我将尝试将要保存的值设置为“” 我是否需要在字段中保存一个空值“”,或者日期类型是否意味着它必须有一个日期格式的值?假设Php 空日期作为1970/01/01进入数据库,php,mysql,Php,Mysql,因此,我有一个数据库列来表示日期,但是当用户将此部分留空并更新它保存在数据库中的记录(1970/01/01)时 现在,当我设置columngnull=no和default=none时,这是行不通的 在我的代码中,我检查该值是否为null(这就是strotime()函数失败的原因)。如果为空,我将尝试将要保存的值设置为“” 我是否需要在字段中保存一个空值“”,或者日期类型是否意味着它必须有一个日期格式的值?假设$this->determination\u date在中,$databaseDate
$this->determination\u date
在中,$databaseDate
在您的代码中永远不会为空,因为strotime()
和date()
总是返回值(包括false
)。您需要检查$niceDate
是否具有有效值,如果没有,则使用空字符串
您还可以使用=
而不是=
作为赋值运算符,这是PHP不会报告的逻辑错误
$niceDate的值是什么?
$niceDate的值是空的或空的,这就是为什么它会这样显示。它是相同的日期,但格式不同。基本上,用户希望数据的格式不同,所以我在前端使其看起来不同,但将其还原为数据库的正确格式。@MatthewSmart我想你得到了困惑。您有一个日期类型,一个空字符串将计算为您看到iirc的日期。如果您根本不想要日期,您需要为该列插入一个NULL。可能是错误的。我投票赞成困惑。您在代码中将值设置为1970,或者是在从db中提取该值之后或之前。这会将其作为1970/01/01保存在数据库中。您仍然是吗确实要使用空字符串进行插入,如:insert into TABLENAME(name,justitution_day)values('tester','');它一定是闹鬼了。或者您仍然在使用date()设置日期
在代码的另一个地方,请回答以下问题:请问您的$this->decision\u date
的格式是什么。如果日期以/
分隔,则采用美式日期格式。如果日期以-
或
分隔,则采用欧洲格式。如果日期以美式格式分隔,则采用strotime()
生成等同于1970/1/1的无效日期
$niceDate = $this->judgement_date;
$databaseDate = date("Y-m-d", strtotime($niceDate));
if(is_null($databaseDate)){
$databaseDate == '';
}
$this->judgement_date = $databaseDate;
$niceDate = $this->judgement_date;
if(empty($databaseDate)){ // null is empty
$databaseDate = '';
}
else {
$databaseDate = date("Y-m-d", strtotime($niceDate));
}
$this->judgement_date = $databaseDate;