在MySQL非null字段上创建DateTime对象

时间:2013-06-04 10:30:06

标签: php mysql datetime

我有一个带有DATETIME NOT NULL数据类型的MySQL表(没有指定默认值)。

对于MySQL默认值,如果我没有指定数据,则该值将变为0000-00-00 00:00:00

然后我从数据库中获取值,该值为0000-00-00 00:00:00。然后我尝试使用检索到的数据创建一个DateTime对象。

$date = new DateTime('0000-00-00 00:00:00');
$formatted_date = $date->format('Y-m-d');
echo $formatted_date; // which display -0001-11-30, an obvious invalid date

检查该值是否不是有效日期的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

使用NULLIF()函数检查列:

SELECT NULLIF('0000-00-00 00:00:01', '0000-00-00 00:00:00');
// Shows 0000-00-00 00:00:01

SELECT NULLIF('0000-00-00 00:00:00', '0000-00-00 00:00:00');
// Shows NULL

但是,我建议应用@ deceze 所说的内容:

  

如果您有时不在字段中输入日期,请​​将其设为NULL

数据应以适当的形式存储。因此,我建议ALTER您的表格列接受NULL s。

UPDv1:

如果您不需要在PHP中使用日期计算,并且只需要输出它,我也建议使用DATE_FORMAT(),因为它在这个问题上更可靠:

SELECT DATE_FORMAT('0000-00-00 00:00:00', '%d.%m.%Y %H:%i:%s');
// Shows '00.00.0000 00:00:00'

答案 1 :(得分:1)

$formatted_date = "";
if($data['row'] != "0000-00-00 00:00:00")
{
  $date = new DateTime('0000-00-00 00:00:00');
  $formatted_date = $date->format('Y-m-d');
}
echo $formatted_date;