我有一个带有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
检查该值是否不是有效日期的最佳方法是什么?
答案 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;